WHERE、ORDER BY 涉及欄位優先建索引IS NULL 判斷:導致索引失效。改用預設值 0,查 num = 0!=/<>:同樣導致全掃OR:打破索引使用。改用 UNION ALL 分開查再合併IN/NOT IN 謹慎:連續值用 BETWEEN;大列表考慮臨時表 JOINLIKE 'abc%' 走索引,LIKE '%abc%' 全掃 → 改全文檢索WHERE num = @num 編譯時未知值 → 強制索引 WITH (INDEX(idx_name)) 或動態 SQLnum/2=100 → num=200;SUBSTRING(name,1,3)='abc' → name LIKE 'abc%'DATEDIFF(day, createdate, '2005-11-30')=0 → createdate >= '2005-11-30' AND createdate < '2005-12-01'WHERE 必須包含索引首欄,且順序一致SELECT ... WHERE 1=0 建空表 → 改 CREATE TABLEIN 改 EXISTS:EXISTS (SELECT 1 FROM b WHERE b.num = a.num)INSERT/UPDATE(需維護索引)VARCHAR 代替 CHAR:節省空間、縮小掃描範圍SELECT *:只取需要欄位,減少 I/O、網路、緩存浪費SELECT ... INTO #temp)SELECT INTO:減少 Log;小量用 CREATE + INSERT 緩解系統表壓力TRUNCATE TABLE #temp; DROP TABLE #temp 避免長鎖FAST_FORWARD 游標:有時優於集合操作SET NOCOUNT ON:SP/Trigger 首尾包裹,減少 DONE_IN_PROC 網路往返