我在表格中有超过700万行
SELECT COUNT(*) FROM MyTable where MyColumn like '%some string%'
给了我20,000行,耗时超过13秒。
该表在MyColumn上有NONCLUSTERED INDEX。
有没有办法提高速度?
答案 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。这样您可以更快地找到匹配的字符串。简而言之,这就是战略。
本书描述了实现细节以及进一步优化的方法。