需要优化SQL查询的帮助
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了需要优化SQL查询的帮助相关的知识,希望对你有一定的参考价值。
我是sql的新手,并创建了下面的sql以获取所需的结果。但是,该查询似乎需要很长时间才能运行,并且运行起来很慢。如果提供优化方面的帮助,那将是很好的。
下面是我正在使用的SQL查询:
SELECT
Date_trunc('week',a.pair_date) as pair_week,
a.used_code,
a.used_name,
b.line,
b.channel,
count(
case when b.sku = c.sku then used_code else null end
)
from
a
left join b on a.ma_number = b.ma_number
and (a.imei = b.set_id or a.imei = b.repair_imei
)
left join c on a.used_code = c.code
group by 1,2,3,4,5
答案
我将查询重写为:
select Date_trunc('week',a.pair_date) as pair_week,
a.used_code, a.used_name, b.line, b.channel,
count(*) filter (where b.sku = c.sku)
from a left join
b
on a.ma_number = b.ma_number and
a.imei in ( b.set_id, b.repair_imei ) left join
c
on a.used_code = c.code
group by 1,2,3,4,5;
对于此查询,您需要在b(ma_number, set_id, repair_imei)
和c(code, sku)
上建立索引。但是,这没有太多的优化空间。
取决于表,可能还有其他可能。例如,or
子句中的in
/ on
通常是一个不好的信号-但不清楚您的意图是什么。
以上是关于需要优化SQL查询的帮助的主要内容,如果未能解决你的问题,请参考以下文章