簡體   English   中英

計數非常慢,有700萬行

[英]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的全文搜索

您可以嘗試全文搜索 ,或文本搜索引擎,如Lucene

首先嘗試使用二進制排序規則,這意味着復雜的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM