mysql - HAVING 与子查询的效率以及原因
问题描述
当我学习 SQL HAVING 教程时,它说: HAVING 是过滤已聚合查询的“干净”方法,但这通常也使用子查询来完成。
有时,HAVING 语句相当于子查询,如下所示:
select account_id, sum(total_amt_usd) as sum_amount
from demo.orders
group by account_id
having sum(total_amt_usd) >= 250000
select *
from (
select account_id, sum(total_amt_usd) as sum_amount
from demo.orders
group by account_id
) as subtable
where sum_amount >= 250000
我想知道推荐哪一个以及为什么这个比另一个更快或更有效的原因。
解决方案
与任何性能问题一样,您应该在数据上进行尝试。但是,两者应该本质上是等价的。如果您对此类问题感兴趣,那么您应该学习如何阅读执行计划。
只是关于 MySQL 的一个注释。MySQL 倾向于实现子查询。通过在过滤结果之前编写结果,这可能会group by
产生一些额外的开销,但您可能不会注意到差异。
推荐阅读
- node.js - 环回js中基于权限/属性的授权
- c - 为什么当我在全局范围内将 char 变量分配给 int 变量时编译器会给我错误?
- android - 未在所有设备上收到 FCM 推送通知
- javascript - componentWillReceiveProps() 中的 nextProps 没有得到状态数组 prop 的正确值
- python - 在python中增加列表的大小
- c# - .net 检查 api 响应数据 c# post request
- html - HTML和数据分析有什么关系?
- angularjs - 如何从 URL、SpringBoot 和 AngularJs 应用程序中删除 #?
- javascript - glDrawElements:绘制的源纹理和目标纹理相同
- html - 如何在不拉伸内容的情况下居中内容?