mysql - 为什么没有聚合的结尾 Group By 会减慢我的查询速度?

标签 mysql sql database group-by query-performance

我最近在继承的程序中遇到了一个很长的 SQL 查询,它连接了 8 个表和 3 个 View 。使用EXPLAIN,我看到这是 7 个唯一键查找和 4 个非唯一键查找。平均需要 18 秒才能获取 350 行(这有很多原因,这 3 个 View 中的每一个都由其他 View 组成)然后,我注意到一个 GROUP BY tableone.id没有任何聚合体。我删除了它,现在它以毫秒为单位运行。

现在令人困惑的部分是,我随后查找了为什么 MySQL 允许使用没有聚合函数的 GROUP BY 语句,并了解到它实际上是一种优化技术( Why does MySQL allow "group by" queries WITHOUT aggregate functions? )。

在我的情况下显然不是这种情况。那么这是为什么呢?什么时候悬挂的GROUP BY会成为障碍而不是优化器?

最佳答案

即使没有使用实际的聚合函数,GROUP BY 子句也意味着 RDBMS 需要进行额外的处理,以便检查某些记录是否需要聚合。因此,当删除不必要的 GROUP BY 时,您会看到效果的提升。

您共享的链接解释说,MySQL 的这种松散行为可能被设计为一种缩短聚合查询语法的方法,其中按一个字段分组意味着其他字段也被分组,也可能作为一种优化。无论如何,这并不适合您的用例,因为您实际上并不需要聚合。

关于mysql - 为什么没有聚合的结尾 Group By 会减慢我的查询速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54045482/

相关文章:

mysql - 数据库引用 DNS 名称而不是 IP 地址?

php - SQL 更新增量不起作用

php - 使用 MySql 按日期汇总数据

database - 在 Linux/POSIX 系统上获取用户全名的最简单方法是什么?

sql - 查询返回的组数

ruby-on-rails - rails - 如何使用链接更改数据库值

每个主机的 MySQL 连接

mysql - 数据库设计:喜欢的表格?

mysql - 按自定义规则对值进行分组

PHP SQL 插入数据库