计数非常慢,有700万行

时间:2011-11-03 06:22:50

标签: sql sql-server performance count

我在表格中有超过700万行

SELECT COUNT(*) FROM MyTable where MyColumn like '%some string%'

给了我20,000行,耗时超过13秒。

该表在MyColumn上有NONCLUSTERED INDEX。

有没有办法提高速度?

3 个答案:

答案 0 :(得分:5)

领先的通配符搜索can not将使用T-SQL进行优化,并且不会使用索引

查看SQL Server的full text search

答案 1 :(得分:3)

您可以尝试使用full-text search或文本搜索引擎,例如Lucene

答案 2 :(得分:2)

首先尝试使用二进制排序规则,这意味着复杂的Unicode规则将被简单的字节比较所取代。

SELECT COUNT(*) 
FROM MyTable 
WHERE MyColumn COLLATE Latin1_General_BIN2 LIKE '%some string%'

另外,请看一下Erland Sommarskog撰写的SQL Server MVP Deep Dives中标题为“建立自己的索引”的章节

基本思想是向用户引入限制,并要求字符串长度至少为三个连续字符。接下来,从MyColumn字段中提取所有三个字母序列,并将这些片段与它们所属的MyTable.id一起存储在表中。在查找字符串时,您也将其拆分为三个字母片段,并查找它们所属的记录ID。这样您可以更快地找到匹配的字符串。简而言之,这就是战略。

本书描述了实现细节以及进一步优化的方法。