HAVING与子查询的效率以及原因

时间:2019-05-09 00:40:09

标签: mysql sql

当我研究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

我想知道推荐哪一种,以及为什么它比另一种更快或更有效的原因。

1 个答案:

答案 0 :(得分:1)

与任何性能问题一样,您应该对数据进行尝试。但是,两者在本质上应该是等效的。如果您对此类问题感兴趣,则应该学习如何阅读执行计划。

关于MySQL的一点说明。 MySQL倾向于实现子查询。通过在过滤结果之前写入group by结果,这可能会产生一些额外的开销,但是您可能不会注意到其中的区别。