在處理結構相同的多張表查詢時,UNION 與 UNION ALL 的行為差異直接影響數據完整性與查詢效能。理解兩者機制,能避免數據遺漏或效能浪費。
UNION 會執行去重操作,合併結果集後過濾重複行,相當於執行 DISTINCT。此過程需排序比較,資源消耗較大。UNION ALL 則直接合併所有結果,保留重複行,無排序開銷,效能顯著優於 UNION。
當查詢條件完全相同且不包含主鍵時,UNION 會過濾重複記錄,導致數據行數少於實際符合條件的總和,造成「漏查」;UNION ALL 則完整返回所有符合條件記錄,保證數據完整性。例如統計多個分表的日誌總量,必須使用 UNION ALL。
若查詢條件包含主鍵(唯一標識),兩者結果一致。因主鍵唯一性天然保證無重複行,UNION 的去重操作無實際效果,但仍產生額外排序開銷,建議仍使用 UNION ALL。
UNION ALLUNION,並評估數據量對排序效能的影響掌握此差異,能在數據倉庫 ETL、分表查詢、報表統計等場景做出正確選擇,兼顧正確性與效能。