文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
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 會在找到第一個符合項時立即停止掃描任何未使用的資料表。在以下情況中,假設 t1 是在 t2 之前使用的(您可以使用 EXPLAIN 來檢查),當它在 t2 中找到第一個資料列時,MySQL 會停止從 t2 讀取(對於 t1 中的任何特定資料列)

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