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;