天天看點

8.2.1.17 DISTINCT Optimization

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;