![](/img/trans.png)
[英]SQL Server “<>” operator is very slow compared to “=” on table with a few million rows
[英]very slow count with 7 million rows
我在表中有超過700萬行
SELECT COUNT(*) FROM MyTable where MyColumn like '%some string%'
給了我20,000行,耗時超過13秒。
該表在MyColumn上有NONCLUSTERED INDEX。
有沒有辦法提高速度?
領先的通配符搜索can not
使用T-SQL進行優化,也不會使用索引
查看SQL Server的全文搜索
首先嘗試使用二進制排序規則,這意味着復雜的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。 這樣您可以更快地找到匹配的字符串。 簡而言之,這就是戰略。
本書描述了實現細節以及進一步優化的方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.