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

SQL Server 百萬級資料優化 30 條鐵律:從索引設計到查詢重寫全覆蓋

     編輯:關於SqlServer

查詢層面優化(1-13)

  1. 避免全表掃描:WHERE、ORDER BY 涉及欄位優先建索引
  2. 拒絕 IS NULL 判斷:導致索引失效。改用預設值 0,查 num = 0
  3. 避開 !=/<>:同樣導致全掃
  4. 慎用 OR:打破索引使用。改用 UNION ALL 分開查再合併
  5. IN/NOT IN 謹慎:連續值用 BETWEEN;大列表考慮臨時表 JOIN
  6. 前綴模糊查詢:LIKE 'abc%' 走索引,LIKE '%abc%' 全掃 → 改全文檢索
  7. 變數參數化陷阱:WHERE num = @num 編譯時未知值 → 強制索引 WITH (INDEX(idx_name)) 或動態 SQL
  8. 欄位避免運算/函數:num/2=100 → num=200;SUBSTRING(name,1,3)='abc' → name LIKE 'abc%'
  9. 函數包裝欄位:DATEDIFF(day, createdate, '2005-11-30')=0 → createdate >= '2005-11-30' AND createdate < '2005-12-01'
  10. 「=」左邊禁運算:系統無法正確匹配索引
  11. 複合索引順序:WHERE 必須包含索引首欄,且順序一致
  12. 拒絕無意義查詢:SELECT ... WHERE 1=0 建空表 → 改 CREATE TABLE
  13. 大表 IN 改 EXISTS:EXISTS (SELECT 1 FROM b WHERE b.num = a.num)

索引策略(14-16)

  1. 非萬能:重複度高欄位(如性別)建索引無效
  2. 適度原則:單表 ≤ 6 個索引;過多拖慢 INSERT/UPDATE(需維護索引)
  3. 慎更新叢集索引鍵:物理順序改變 = 整表重排,代價極大

資料類型與結構(17-19)

  1. 優先數值型:字串比較逐字元,數值單次比較
  2. VARCHAR 代替 CHAR:節省空間、縮小掃描範圍
  3. 禁用 SELECT *:只取需要欄位,減少 I/O、網路、緩存浪費

臨時表與游標(20-27)

  1. 表變數優於臨時表:但大數據量索引僅限 PK
  2. 減少建刪頻率:降低系統表爭用
  3. 恰當使用臨時表:重複引用大結果集時有效;一次性事件用導出表(SELECT ... INTO #temp)
  4. 大量插入用 SELECT INTO:減少 Log;小量用 CREATE + INSERT 緩解系統表壓力
  5. 顯式清理:TRUNCATE TABLE #temp; DROP TABLE #temp 避免長鎖
  6. 游標最後手段:>1 萬行必改寫;優先尋找集合解法
  7. 小集合 FAST_FORWARD 游標:有時優於集合操作
  8. 雙軌驗證:時間允許下同時試集合與游標,取優者

系統級優化(28-30)

  1. SET NOCOUNT ON:SP/Trigger 首尾包裹,減少 DONE_IN_PROC 網路往返
  2. 縮小事務範圍:提升並發
  3. 避免大結果集回傳:分頁、篩選、聚合下推
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved