查詢優化是 RDBMS 效能關鍵。優化器透過代價模型從數百執行計劃中選擇最優,自動適應統計變化,釋放開發者負擔。
核心規則 (E1,E2,E3 為關係代數表達式):
E1 × E2 ≡ E2 × E1、E1 ⋈ E2 ≡ E2 ⋈ E1(E1 × E2) × E3 ≡ E1 × (E2 × E3)πA(πB(E)) ≡ πA(E) (A⊆B)σF1(σF2(E)) ≡ σF1∧F2(E)σF(πA(E)) ≡ πA(σF(E)) (F 僅涉及 A)σF(E1×E2) ≡ σF(E1)×E2 (F 僅涉及 E1)σF(E1∪E2) ≡ σF(E1)∪σF(E2)、σF(E1-E2) ≡ σF(E1)-σF(E2)σF(E1⋈E2) ≡ σF(E1)⋈σF(E2) (F 僅涉及公共屬性)πA(E1×E2) ≡ πA1(E1)×πA2(E2)、πA(E1∪E2) ≡ πA(E1)∪πA(E2)σF1∧F2∧...∧Fn(E) → σF1(σF2(...(σFn(E))...))。初始代數:πS#,SNAME(σCNAME='MATH'∧SEX='F'(C ⋈ SC ⋈ S))
優化後:先對 C 做 σCNAME='MATH'、S 做 σSEX='F',大幅縮減 Join 輸入;若 C.C#、SC.C#、SC.S#、S.S# 有索引,再用 Index Join,代價極低。
選擇早做、投影早做、公共子表達式提取、Pipelining 避免中間物化、索引輔助 Join。