美文网首页
mysql 翻译系列 十六

mysql 翻译系列 十六

作者: 如风_dcac | 来源:发表于2025-02-28 14:33 被阅读0次

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一旦找到第一个匹配项,就会停止扫描任何未使用的表。在下面这种情况下,假设EXPLAIN显示t1t2之前被使用,那么MySQL在找到t2中的第一行(对于t1中的任何特定行)后,就会停止读取t2

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

相关文章

网友评论

      本文标题:mysql 翻译系列 十六

      本文链接:https://www.haomeiwen.com/subject/cshtmjtx.html