MySQL 9.0 版本注意事項
DISTINCT
與 ORDER BY
結合在許多情況下需要暫存資料表。
因為 DISTINCT
可能會使用 GROUP BY
,請了解 MySQL 如何處理 ORDER BY
或 HAVING
子句中不屬於選取資料行一部分的資料行。請參閱 第 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_count
DISTINCT
結合時,MySQL 會在找到 row_count
個唯一資料列時立即停止。
如果您沒有使用查詢中所有資料表中的資料行,MySQL 會在找到第一個符合項時立即停止掃描任何未使用的資料表。在以下情況中,假設 t1
是在 t2
之前使用的(您可以使用 EXPLAIN
來檢查),當它在 t2
中找到第一個資料列時,MySQL 會停止從 t2
讀取(對於 t1
中的任何特定資料列)
SELECT DISTINCT t1.a FROM t1, t2 where t1.a=t2.a;