sql 百万数据模糊查询 多or

我查询一个表,同一个字段要比配很多的关键词,请大家看sql语句
------------------------------------
select * from kuaif_down_rj where (
rjfl like '%,29,%' or
rjfl like '%,30,%' or
rjfl like '%,31,%' or
rjfl like '%,32,%' or
rjfl like '%,33,%' or
rjfl like '%,34,%' or
rjfl like '%,35,%' or
rjfl like '%,36,%' or
rjfl like '%,37,%' or
rjfl like '%,38,%' or
rjfl like '%,39,%' or
rjfl like '%,40,%' or
rjfl like '%,41,%' or
rjfl like '%,42,%' or
rjfl like '%,43,%' or
rjfl like '%,44,%' or
rjfl like '%,45,%' or
rjfl like '%,46,%' or
rjfl like '%,47,%' or
rjfl like '%,48,%' or
rjfl like '%,49,%' or
rjfl like '%,50,%'
) order by time_h desc
-----------------------------------------
以上查询很慢,而且占cpu,大家有没有更好的查询方法?
没有分,希望大家能帮帮忙啊

从30到49可以用通配符来表示,所以可以改成这样:
select * from kuaif_down_rj where (
rjfl like '%,29,%' or
rjfl like '%,[34][0-9],%' or
rjfl like '%,50,%'
) order by time_h desc
你测试下效率有没有提高吧。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-11-06
如果,29,到,50,位置有一定规律的话,截取它建函数索引吧。
第2个回答  2012-11-06
你分开来查询,每个条件写一个查询,最后union 一下,效果应该好点
还有一个方法就是把你这些 like 的条件找出一个最大的范围来,然后把这个范围的的数据放到临时表里去查,这样效果应该最好点
第3个回答  2012-11-06
你这个肯定没有办法的。

索引不能用,只能全表扫描。
第4个回答  2012-11-06
能不能用BETWEEN AND 语句啊,楼主我也没试过,我只是提出来试试。呵呵
BETWEEN '%,29,%' AND rjfl like '%,50,%' ;
相似回答