文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


10.2.1.18 DISTINCT 優化

在許多情況下,DISTINCTORDER BY 結合需要暫存資料表。

由於 DISTINCT 可能會使用 GROUP BY,請了解 MySQL 如何處理 ORDER BYHAVING 子句中不屬於選取欄的欄。請參閱第 14.19.3 節,「MySQL 的 GROUP BY 處理方式」

在大多數情況下,DISTINCT 子句可以視為 GROUP BY 的特殊情況。例如,以下兩個查詢是等效的

SELECT DISTINCT c1, c2, c3 FROM t1
WHERE c1 > const;

SELECT c1, c2, c3 FROM t1
WHERE c1 > const GROUP BY c1, c2, c3;

由於這種等效性,適用於 GROUP BY 查詢的最佳化也可以應用於具有 DISTINCT 子句的查詢。因此,如需有關 DISTINCT 查詢最佳化可能性的更多詳細資訊,請參閱第 10.2.1.17 節,「GROUP BY 優化」

LIMIT row_countDISTINCT 結合使用時,MySQL 會在找到 row_count 個唯一列時立即停止。

如果您未使用查詢中命名的所有資料表的欄,則 MySQL 會在找到第一個符合的項目時立即停止掃描任何未使用的資料表。在以下情況中,假設 t1t2 之前使用(您可以使用 EXPLAIN 來檢查),當它在 t2 中找到第一列時,MySQL 會停止從 t2 讀取(針對 t1 中的任何特定列)

SELECT DISTINCT t1.a FROM t1, t2 where t1.a=t2.a;