1、有字段A,字段B,字段C,字段D,字段1,字段2,字段3.。。。。
2、字段A,字段B,字段C,字段D 分别建立了索引;字段类型均为varchar
3、表记录数大概在50万~80万
要查询记录时使用多个字段like查询,语句如下:
SELECT * FROM TEMP WHERE 字段1 LIKE 'xxx' or 字段2 LIKE 'xxx' or 字段3 LIKE 'xxx' or 字段4 LIKE 'xxx'
现在的情况很明显就是性能很低下,请问针对这种应用应该如何提供查询性能呢?大家目前都采用什么方案来解决?
请高手指教,谢谢!
11 个解决方案
#1
LIKE里不加通配符"%","_"的话,为何不用"字段=[值]"就行了呢?
#2
如果是 columnname like 'xxx' 而不是 columnname like '%xxx%',那不如用 columnname='xxx'.
如果是后者,那就没办法了.去一个字段值里去查找一些字串,是没办法利用索引的.
如果是后者,那就没办法了.去一个字段值里去查找一些字串,是没办法利用索引的.
#3
A B C D建了索引,查询是 1 2 3 4.。。
这样的LIKE在2005不会走索引,在2008有可能,看数据分布
通常这样的条件查询只有走表扫描
这样的LIKE在2005不会走索引,在2008有可能,看数据分布
通常这样的条件查询只有走表扫描
#4
不好意思,写错了,带前后%号的
SELECT * FROM TEMP WHERE 字段1 LIKE '%xxx%' or 字段2 LIKE '%xxx%' or 字段3 LIKE '%xxx%' or 字段4 LIKE '%xxx%'
SELECT * FROM TEMP WHERE 字段1 LIKE '%xxx%' or 字段2 LIKE '%xxx%' or 字段3 LIKE '%xxx%' or 字段4 LIKE '%xxx%'
#5
那恐怕就帮不了你了.
能不用 link 的地方,尽量不用,否则性能会大受影响.
能不用 link 的地方,尽量不用,否则性能会大受影响.
#6
我的这个数据量相对还是比较少的,对于还大点的数据量,而且这种多个字段模糊检索应该也是有的,他们一般都采用什么方法解决呢?
#7
其实,Like '%xxx%' 跟 Like 'xxx%' 是有差别的,
后者是可以用到索引的.所以楼主看能否改成 Like 'xxx%'的形式?
后者是可以用到索引的.所以楼主看能否改成 Like 'xxx%'的形式?
#8
什么样的几十万条的数据需要like查询?
#9
可能要使用全文索引,不过mssql的全文索引据说一般般
#10
可能的话,是否可以调整Where中的条件的先后次序,把命中率高的条件放前面?
#11
用全文索引吧,据说性能一般,但是会比你那4个like好。
#1
LIKE里不加通配符"%","_"的话,为何不用"字段=[值]"就行了呢?
#2
如果是 columnname like 'xxx' 而不是 columnname like '%xxx%',那不如用 columnname='xxx'.
如果是后者,那就没办法了.去一个字段值里去查找一些字串,是没办法利用索引的.
如果是后者,那就没办法了.去一个字段值里去查找一些字串,是没办法利用索引的.
#3
A B C D建了索引,查询是 1 2 3 4.。。
这样的LIKE在2005不会走索引,在2008有可能,看数据分布
通常这样的条件查询只有走表扫描
这样的LIKE在2005不会走索引,在2008有可能,看数据分布
通常这样的条件查询只有走表扫描
#4
不好意思,写错了,带前后%号的
SELECT * FROM TEMP WHERE 字段1 LIKE '%xxx%' or 字段2 LIKE '%xxx%' or 字段3 LIKE '%xxx%' or 字段4 LIKE '%xxx%'
SELECT * FROM TEMP WHERE 字段1 LIKE '%xxx%' or 字段2 LIKE '%xxx%' or 字段3 LIKE '%xxx%' or 字段4 LIKE '%xxx%'
#5
那恐怕就帮不了你了.
能不用 link 的地方,尽量不用,否则性能会大受影响.
能不用 link 的地方,尽量不用,否则性能会大受影响.
#6
我的这个数据量相对还是比较少的,对于还大点的数据量,而且这种多个字段模糊检索应该也是有的,他们一般都采用什么方法解决呢?
#7
其实,Like '%xxx%' 跟 Like 'xxx%' 是有差别的,
后者是可以用到索引的.所以楼主看能否改成 Like 'xxx%'的形式?
后者是可以用到索引的.所以楼主看能否改成 Like 'xxx%'的形式?
#8
什么样的几十万条的数据需要like查询?
#9
可能要使用全文索引,不过mssql的全文索引据说一般般
#10
可能的话,是否可以调整Where中的条件的先后次序,把命中率高的条件放前面?
#11
用全文索引吧,据说性能一般,但是会比你那4个like好。