gpt4 book ai didi

mysql - 几乎相同的查询给出不同的执行时间

转载 作者:可可西里 更新时间:2023-11-01 08:31:40 26 4
gpt4 key购买 nike

我有这两个问题:

SELECT SQL_NO_CACHE DISTINCT(type) FROM actions LIMIT 0, 30;

SELECT SQL_NO_CACHE type FROM actions GROUP BY type LIMIT 0, 30;

如果我不使用 LIMIT 子句,执行时间是相等的。另一方面,在我的例子中,第一个查询花费了将近 0.8 秒,而第二个查询花费了 0.12 秒。

使用EXPLAIN,似乎唯一的区别是第一个查询使用临时表,而第二个查询没有。

在这一点上,我对这两个查询的不同行为感到非常惊讶......你能提供一些关于这个问题的启示吗?

我目前使用的是 MYSQL 5.5.37-35.1 Percona Server (GPL),版本 35.1,修订版 666

最佳答案

LIMIT 优化似乎只有在有 ORDER BY 子句时才适用于 GROUP BY。正如 Gordon Linoff 在之前(已删除)的回答中所建议的那样,GROUP BY 查询有一个隐式的 ORDER BY。因此,GROUP BY 查询使用了LIMIT 优化。

尽管 DISTINCT 查询基本上使用 GROUP BY 来解决它,隐式的 ORDER BY 并不存在。将显式 ORDER BY 子句添加到 DISTINCT 查询会产生与 GROUP BY 查询相同的执行计划和相同的性能:

SELECT SQL_NO_CACHE DISTINCT(type) FROM actions ORDER BY type LIMIT 0, 30;

SELECT SQL_NO_CACHE type FROM actions GROUP BY type LIMIT 0, 30;

关于mysql - 几乎相同的查询给出不同的执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24532691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com