8.2.1.17 DISTINCT Optimization
DISTINCT 結合ORDER BY 需要一個臨時表在很多情況下:
因為DISTINCT 可能使用GROUP BY, 了解MySQL 和列在ORDER BY 或者HAVING 子句
不是SELECT 的列
在大多數情況下,一個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 查詢。
當結合LIMIT row_count 和DISTINCT, MySQL 停止當找到row_count 唯一的行就停止
ruguo9你不使用 從查詢的所有表的列, MySQL 停止掃描任何不使用的表 隻要它找到第一個比對。
在下面的例子,架設 t1是在t2前使用( 你可以通過EXPLAIN檢查)
MySQL 停止從t2讀取
SELECT DISTINCT t1.a FROM t1, t2 where t1.a=t2.a;