DISTINCT优化
DISTINCT
ORDER BY
在许多情况下,结合需要一个临时表。
因为DISTINCT
可能使用GROUP BY
,所以了解MySQL如何处理不属于所选列的ORDER BY
or HAVING
子句中的列。请参见“ GROUP BY的MySQL处理”。
在大多数情况下,DISTINCT
子句可以视为的特殊情况GROUP BY
。例如,以下两个查询是等效的:
SELECT DISTINCT c1, c2, c3FROM t1WHERE c1 > const;SELECT c1, c2, c3FROM t1WHERE c1 > constGROUP BY c1, c2, c3;
由于这种等效性,适用于GROUP BY
查询的优化也可以应用于带有DISTINCT
子句的查询。因此,有关DISTINCT
查询优化可能性的更多详细信息,请参见“按优化分组”。
与结合使用时,MySQL一旦找到唯一的行,就会停止运行。LIMIT row_count
DISTINCT
row_count
如果您不使用查询中命名的所有表中的列,则MySQL会在找到第一个匹配项后立即停止扫描任何未使用的表。在以下情况下,假设t1
以前使用过t2
(您可以通过进行检查EXPLAIN
),则MySQL t2
在t1
找到以下内容的第一行时将停止从中读取(对于中的任何特定行)t2
:
SELECT DISTINCT t1.FROM t1, t2where t1. =t2. ;