-- DISTINCT 多欄位 (對所有列組合去重)
SELECT DISTINCT t.f_resume_id || t.f_resume_status,
t.f_resume_status,
t.f_recruit_channel,
t.f_small_channel_id
FROM css.t_resume_info t
WHERE t.f_resume_status IN (80011, 80012);
-- GROUP BY 達到相同效果
SELECT a, b, c, MIN(d) AS d
FROM A
GROUP BY a, b, c;
兩者結果集相同,但語意不同:
DISTINCT:單純去重,語意清晰,優化器可直接走「排序去重」或「Hash Unique」。GROUP BY:分組聚合語意,需指定聚合函數 (如 MIN、MAX),優化器可能選擇「Sort Group By」或「Hash Group By」。| 場景 | 建議 | 理由 |
|---|---|---|
| 單純去重、無聚合需求 | DISTINCT | 語法簡潔,執行計畫通常更輕量 |
| 需同時計算聚合值 (COUNT/SUM/AVG) | GROUP BY | 一次掃描完成去重與聚合 |
| 大數據量、有適當索引 | 皆可,看執行計畫 | 優化器可能轉換為相同運算 |
網友實測:
DISTINCT效率略優於GROUP BY ... HAVING COUNT(*) > 1類寫法。
原則:能用 DISTINCT 解決去重,就別用 GROUP BY;需聚合時才用 GROUP BY。