MySQL 8.4 版本資訊
在許多情況下,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;