首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 查詢優化三大實戰技巧:解決記憶體溢出、多關鍵字搜尋與索引失效避坑

     編輯:關於SqlServer

本文以 abigale=查詢字串、ada=資料表、alice=欄位為代號,呈現三大優化技巧。

技巧一:Access 含日文片假名等特殊字元導致記憶體溢出

現象:LIKE '%...%' 查詢觸發記憶體溢出。

解法:改用 Recordset Filter 機制,將篩選下推客戶端:

sql = "select * from ada"
rs.filter = "alice like '%" & abigale & "%'"

技巧二:類百度多關鍵字搜尋實作(空格分隔)

ck = split(abigale, " ")
sck = UBound(ck)
sql = "select * from ada where "
For i = 0 To sck
    ' 單欄位 AND 邏輯
    SQL = SQL & tempJoinWord & "(alice like '" & ck(i) & "%')"
    tempJoinWord = " and "
    ' 雙欄位 OR+AND 邏輯
    SQL = SQL & tempJoinWord & "(alice like '" & ck(i) & "%' or alice1 like '" & ck(i) & "%')"
    tempJoinabigale = " and "
Next

技巧三:提升查詢效率的七條鐵律

  1. 避免 OR:導致全表掃描,效能暴跌。
  2. charindex() 不優於前置 % 的 LIKE:且會導致索引失效(SQL Server)。
  3. 前置 % 殺索引:LIKE '%關鍵字%' 索引失效;LIKE '關鍵字%' 索引生效。
  4. 通配差異:'%關鍵字%' 雙向匹配(含「集市」找「斯卡布羅集市」);'關鍵字%' 僅前綴匹配(找「集市」無結果)。
  5. 欄位按需提取:拒絕 SELECT *,每少一欄位即有速度提升,提升幅度視欄位大小而定。
  6. ORDER BY 聚集索引欄位最快:每表僅一聚集索引(預設 PK),可調整為高頻排序欄位。
  7. 建立適當索引:可提速數十至數百倍。

實測案例:100 萬筆 News 表索引效能對比

方案索引策略查詢語句耗時
1PK 聚集,無非聚集Title/Author LIKE '%kw%' + ORDER BY Id50 秒
2Title/Author/Star 非聚集Title/Author LIKE 'kw%' + ORDER BY Id2-2.5 秒
3同方案 2Title/Author LIKE 'kw%' + ORDER BY Star2 秒
4同方案 2Title/Author LIKE 'kw%' 無排序1.8-2 秒
5同方案 2單欄位 LIKE 'kw%' 無排序1 秒

結論:去除前置 % + 建立非聚集索引 + 避免 OR + 單欄位查詢 組合拳,將查詢從 50 秒壓至 1 秒內,提升 50 倍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved