文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF(US Ltr) - 40.0Mb
PDF(A4) - 40.1Mb
手册页(TGZ) - 258.2Kb
手册页(Zip) - 365.3Kb
Info(Gzip) - 4.0Mb
Info(Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  DISTINCT 优化

10.2.1.18 DISTINCT 优化

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

由于 DISTINCT 可能会使用 GROUP BY,了解 MySQL 如何处理不在选定列中的 ORDER BYHAVING 子句中的列。请参阅 第 14.19.3 节,“MySQL 的 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 优化”

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

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

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