首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle DISTINCT 多欄位去重 vs GROUP BY 效能選擇指南

     編輯:Oracle 資料庫相關知識

語法對比

-- 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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved