SQL 查詢優化的核心原則是盡量避免全表掃描。本文整理 30 個實戰優化技巧,涵蓋索引設計、WHERE 條件撰寫、JOIN 處理、臨時表使用、游標替代方案等核心領域,助你撰寫高效能的 T-SQL 程式碼。
WHERE num IS NULL),這會導致索引失效。建議將欄位設為 NOT NULL 並給予預設值(如 0),改用 WHERE num = 0 查詢。UNION ALL 分開查詢再合併結果。BETWEEN;子查詢場景優先考慮 EXISTS 替代 IN。WITH (INDEX(索引名)) 強制指定索引。num/2=100、SUBSTRING(name,1,3)='abc'),應改寫為 num=200、name LIKE 'abc%' 等 SARGable 形式。CREATE TABLE,勿用 SELECT ... WHERE 1=0。COUNT(*),會觸發全表掃描且無業務意義。SELECT *,明確列出所需欄位,減少網路傳輸與 I/O。SELECT INTO 避免大量 Log;小量資料用 CREATE TABLE + INSERT 緩和系統表壓力。TRUNCATE TABLE 再 DROP TABLE,避免長時間鎖定系統表。FAST_FORWARD 唯讀順向游標,在需關聯多表取得資料時表現優於其他逐列法。SET NOCOUNT ON/OFF,抑制 DONE_IN_PROC 訊息降低網路負擔。線上環境執行大量刪除/插入會鎖表導致服務停擺。解法是分批處理 + 間歇性釋放鎖。MySQL 範例:
WHILE (1) {
-- 每次只處理 1000 筆
mysql_query("DELETE FROM logs WHERE log_date <= '2012-11-01' LIMIT 1000");
IF (mysql_affected_rows() == 0) BREAK; -- 刪除完成
usleep(50000); -- 暫停 0.05 秒釋放鎖
}
SQL Server 同理可用 TOP (1000) 配合 WAITFOR DELAY 實現相同效果。