【发布时间】:2011-11-03 06:22:49
【问题描述】:
我在一个表中有超过 700 万行,并且
SELECT COUNT(*) FROM MyTable where MyColumn like '%some string%'
给我 20,000 行,耗时超过 13 秒。
该表在 MyColumn 上有 NONCLUSTERED INDEX。
有什么办法可以提高速度?
【问题讨论】:
-
唉,
%substring%即使使用索引也无法真正有效……但是,如果您正在寻找相邻的单词,那么全文索引可能会有所帮助。 -
您使用
LIKE子句的事实意味着无论如何它都必须处理每一行。 -
将 LIKE 运算符与前导
%一起使用可以有效地使任何索引无效。如果您要搜索LIKE 'something%',则应使用该索引,它应该快很多 -
您尝试使用
SELECT COUNT(*)然后使用SELECT *然后您又尝试SELECT COUNT(*)吗?可能是您的结果仍然缓存在内存中。使用LIKE '%something%'将导致您的索引被忽略,因此无论如何它都必须读取整个表,因此人们会期望SELECT *的性能与SELECT COUNT(*)相同
标签: sql sql-server performance count