需要优化SQL查询的帮助

问题描述 投票:0回答:1

我是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
sql postgresql
1个回答
0
投票

我将查询重写为:

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通常是一个不好的信号-但不清楚您的意图是什么。

© www.soinside.com 2019 - 2024. All rights reserved.