公司目前有一个需求在5W左右的数据上 对一字段(varchar) 实现 :模糊快速 检索。说下我目前做的一些实验:mysql5:对该 字段 建立索引: 查询 like '%NNN' 在java程序上用时 50ms(毫秒)左右 sql2000:对该 字段 建立索引: 查询 like '%NNN' 在java程序上用时 40ms左右 对该 字段 建立全文索引:可以实现模糊查询 在java程序上用时 100ms左右 lucene : 对该 字段 建立索引(并保存所有数据) 可以实现模糊查询 在java程序上用时 170ms左右
领导说效率太低了:领导希望在 该数据量(5W+)下模糊查询:10ms以下 模糊查询的定义: 如: 输入 “北京 + 空格 + 商场” 把包含 北京 和 商场 (北京 和 商场 的位置可前可后——可互换位置) 的数据都查出:(4) 如果将 北京 和 商场 给索引了(2列数据) 怎么查出 都包含 北京和商场的对应数据
领导给我一个建议(索引表——我不了解是什么):他给我解释是: 先将 该字段 分词 建立一个表(table2) ,再在table2上做索引,然后再搜索。我是一个才毕业的学生,因为水平有限,请各位前辈都给点指点和意见!您的回答:1:5W+数据量下 10ms以下 的模糊查询(如上解释)是否能否实现?2:如果1能实现,实现的方法是?(如果能够自信请仔细点)3:其他方法建议(可能提高数据检索的速度和实现模糊查询功能)!!!4:(4如上标注)怎么实现?希望各位前辈和朋友不吝赐教!不会的朋友也可以学学数据检索方面的知识。来给意见和回答的朋友都给分,分不够则加。。希望都来说一下!!我都弄了2个星期了,还是没什么眉目!!再次谢谢 各位了!!
领导说效率太低了:领导希望在 该数据量(5W+)下模糊查询:10ms以下 模糊查询的定义: 如: 输入 “北京 + 空格 + 商场” 把包含 北京 和 商场 (北京 和 商场 的位置可前可后——可互换位置) 的数据都查出:(4) 如果将 北京 和 商场 给索引了(2列数据) 怎么查出 都包含 北京和商场的对应数据
领导给我一个建议(索引表——我不了解是什么):他给我解释是: 先将 该字段 分词 建立一个表(table2) ,再在table2上做索引,然后再搜索。我是一个才毕业的学生,因为水平有限,请各位前辈都给点指点和意见!您的回答:1:5W+数据量下 10ms以下 的模糊查询(如上解释)是否能否实现?2:如果1能实现,实现的方法是?(如果能够自信请仔细点)3:其他方法建议(可能提高数据检索的速度和实现模糊查询功能)!!!4:(4如上标注)怎么实现?希望各位前辈和朋友不吝赐教!不会的朋友也可以学学数据检索方面的知识。来给意见和回答的朋友都给分,分不够则加。。希望都来说一下!!我都弄了2个星期了,还是没什么眉目!!再次谢谢 各位了!!
解决方案 »
- 如何写这样的SQL语句?
- 不显示删除回复显示所有回复显示星级回复显示得分回复 一个分组查询.问题. 在线等
- 请问环形数据同步在什么情况下使用
- 我有一个很复杂的存储过程A返回结果集,我想写另外的一个存储过程B调用A,存储过程B的作用是将A查询出来数据写数数据表,该如何写呢
- 主从配置问题
- 求mysql实现split的方法
- 求教,大数据量的导出!!!求个思路。
- 我想在表里查找相同的两行,总是查不出结果。
- 各位大哥大姐帮帮忙!!很简单的问题!!
- Can't connect to local MySQL server through socket '/tmp/mysql.sock'
- 在MYSQL5.0建立触发器后出现illegal mix of collations gb2312_chinese_ci implicit and latin1_swedish_ci implicit for operation '= '
- MYSQL定时执行语句如何实现啊~~~~~救救命
你们领导说的就是解决问题的办法
先分词,再对分词做索引三言两语说不清楚,你自己看看lucene的相关内容
我给name 做了索引,select * from table where name='number' (number是个 1---20000的数字);
这样的准确查询(在java程序中)最少都需要20ms,怎么才能达到10ms的要求啊?
不过,你们领导的意思也够可以的,如果我有一条数据,天津汽车。然后我输入条件 “津汽” 估计你不会给我把天津汽车查出来吧。那个时候,你要判断,你收录的那个信息表中有没有记录,如果没有,还是要按照正常搜索的。领导的表估计是如下三个字段:
id , name , 主表的主键序列(以逗号分隔)
1 天津 1,3,5,6,7,8,9,....
2 汽车 1,2,3,4,5,9,....
3 北京 2,3,5,6,9,......
4 XXX 3,4,5,6,7,8,....
然后在 name 上建索引,或者不要id字段,name就是主键。楼主是否明白意思了:
然后,这其实是2条sql语句,由于主键已经知道了,SQL 语句的 in (主键) 的速度其实是很快的。
如果索引表命中的话,主表在100W条数据量的情况下,查询时间在 10ms 以内应该问题不大。除非你的机器是286.
但是,要是没有命中,楼主就不得不按照正常方式查询了。
13楼的朋友。。你们一般怎么测试查询所需的时间的?(我是通过java程序查看的时间)如:long begin = new Date().getTime();
conn.executeQuery("SELECT * FROM lucenesearch.indextest i where i.name in(19456)");
long end = new Date().getTime();
System.out.println((end - begin)+"毫秒");
请问一下 ,。你们一般怎么测试数据库查询所需的时间的?
(我是通过java程序查看的时间)如:long begin = new Date().getTime(); //开始时间
conn.executeQuery("select * from sichuan where id=16547"); //执行查找
long end = new Date().getTime(); //结束时间
System.out.println((end - begin)+"毫秒");像这样的一个 准确查找 平均都需要 30 毫秒
declare @d datetime
set @d=now()
并在select语句后加:
select timediff(now(),@d) as 语句执行花费时间(毫秒)
declare @d datetime
set @d=now()
select * from sichuan where id=18652;
select timediff(now(),@d) as b;运行不起啊!前辈给个能运行,并且能看到相差时间的 完整代码 行吗?
无语了。。
我在 mysql-aministator和 mysql-front以及 dos下都运行不起!
set @d=now();
select * from sichuan where id=18652;
select timediff(now(),@d) as b;
结果有2个,我测试过的,注意分号结束,呵呵