19.MySQL优化DISTINCT Optimization

介绍

DISTINCT与ORDER 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与LIMIT row_count结合使用时,MySQL会在查找到row_count时立刻终止查询。

如果不需要使用到查询中所有表的所有列,MySQL会在找到第一个匹配项后立即停止扫描所有未使用的表。在下面的例子中,假设假设T1在T2之前使用,当它在t2中找到第一行时,MySQL停止从t2读取(对于t1中的任何特定行):

	SELECT DISTINCT t1.a FROM t1, t2 where t1.a=t2.a;

猜你喜欢

转载自blog.csdn.net/ciqingloveless/article/details/83989048