| 運算子 | 行為 | 效能 | 適用場景 |
|---|---|---|---|
| UNION | 合併結果集並 移除重複列(執行 DISTINCT 排序/雜湊) | 較慢 | 業務需唯一結果集,且重複率低 |
| UNION ALL | 直接合併結果集,保留所有列(含重複) | 快(無去重開銷) | 明確知結果集無重複、或需保留重複、或後續自行處理 |
表 Key_Item_Cal 需產出三層報表:明細、一級彙總、二級彙總。若直接用 UNION 串接三個查詢:
-- 明細
SELECT Key_item_name, QTY_RECVD1, Style FROM ...
-- 一級彙總
SELECT Key_item_name, SUM(QTY_RECVD1), MAX(Style) FROM ... GROUP BY Style, Key_item_name
-- 二級彙總
SELECT MAX(Key_item_name), SUM(QTY_RECVD1), Style FROM ... GROUP BY Style
UNION 會對三層結果再做一次全域去重,導致:
UNION ALL。UNION 但確認欄位語意,或於外層包一層 SELECT DISTINCT * FROM ( ... UNION ALL ... ) t 明確控制去重範圍。COMPUTE / GROUPING SETS(SQL 2008+)單一查詢產出多層彙總,避免多次掃描。UNION ALL,除非確定需要去重。DISTINCT。Distinct Sort 或 Hash Match (Aggregate) 運算子評估開銷。