SQLServer2005 50万记录多个LIKE性能优化

chen_hh2 2010-12-25 12:08:42
数据库使用的SQLSERVER2005,其中有一个表TEMP:

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'

现在的情况很明显就是性能很低下,请问针对这种应用应该如何提供查询性能呢?大家目前都采用什么方案来解决?

请高手指教,谢谢!
...全文
805 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lujianjian 2011-01-03
  • 打赏
  • 举报
回复
用全文索引吧,据说性能一般,但是会比你那4个like好。
yyfhz 2010-12-29
  • 打赏
  • 举报
回复
可能的话,是否可以调整Where中的条件的先后次序,把命中率高的条件放前面?
chen_hh2 2010-12-25
  • 打赏
  • 举报
回复
我的这个数据量相对还是比较少的,对于还大点的数据量,而且这种多个字段模糊检索应该也是有的,他们一般都采用什么方法解决呢?
-晴天 2010-12-25
  • 打赏
  • 举报
回复
那恐怕就帮不了你了.
能不用 link 的地方,尽量不用,否则性能会大受影响.
chen_hh2 2010-12-25
  • 打赏
  • 举报
回复
不好意思,写错了,带前后%号的
SELECT * FROM TEMP WHERE 字段1 LIKE '%xxx%' or 字段2 LIKE '%xxx%' or 字段3 LIKE '%xxx%' or 字段4 LIKE '%xxx%'

Q315054403 2010-12-25
  • 打赏
  • 举报
回复
A B C D建了索引,查询是 1 2 3 4.。。
这样的LIKE在2005不会走索引,在2008有可能,看数据分布
通常这样的条件查询只有走表扫描
-晴天 2010-12-25
  • 打赏
  • 举报
回复
如果是 columnname like 'xxx' 而不是 columnname like '%xxx%',那不如用 columnname='xxx'.
如果是后者,那就没办法了.去一个字段值里去查找一些字串,是没办法利用索引的.
唐诗三百首 2010-12-25
  • 打赏
  • 举报
回复
LIKE里不加通配符"%","_"的话,为何不用"字段=[值]"就行了呢?
haitao 2010-12-25
  • 打赏
  • 举报
回复
可能要使用全文索引,不过mssql的全文索引据说一般般
ohfox 2010-12-25
  • 打赏
  • 举报
回复
什么样的几十万条的数据需要like查询?
唐诗三百首 2010-12-25
  • 打赏
  • 举报
回复
其实,Like '%xxx%' 跟 Like 'xxx%' 是有差别的,
后者是可以用到索引的.所以楼主看能否改成 Like 'xxx%'的形式?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧