1. 程式人生 > >19.MySQL優化DISTINCT Optimization

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;