Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


10.2.1.18 DISTINCT 优化

DISTINCTORDER BY组合在许多情况下需要临时表。

由于DISTINCT可能使用GROUP BY,了解MySQL如何处理在ORDER BYHAVING子句中出现的非选择列。请参阅第14.19.3节,“MySQL Handling of GROUP 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查询的优化可能性,请参阅第10.2.1.17节,“GROUP BY Optimization”

当将LIMIT row_countDISTINCT组合时,MySQL会在找到row_count个唯一行后停止。

如果您不使用查询中指定的所有表的列,MySQL将在找到第一个匹配项时停止扫描未使用的表。在以下情况下,假设t1t2之前(可以通过EXPLAIN检查),MySQL将在找到t2中的第一个行时停止从t2中读取(对于t1中的任何特定行):

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