Q1 记SQL查询的一次优化 where 与 having

原sql

表用table_a, table_b代替,字段简化,sql复杂程度简化。

select a.date, sum(a.num), b.name
from table_a a
    left join table_b b on b.a_orderno = a.orderno
group by a.date, b.name
order by a.date 

数据量较大,无条件过滤,查询效率还过得去,但加上查询条件,查询效率直线下降,毫无头绪。

select a.date, sum(a.num), b.name
from table_a a
    left join table_b b on b.a_orderno = a.orderno
where a.date <= '2020-01-01' 
    and a.date >= '2020-12-31'
group by a.date, b.name
order by a.date

后发现,查询条件均为分组条件,将where改为having,查询效率正常

select a.date, sum(a.num), b.name
from table_a a
    left join table_b b on b.a_orderno = a.orderno
group by a.date, b.name
having a.date <= '2020-01-01' 
    and a.date >= '2020-12-31'
order by a.date
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。