首页 > 解决方案 > 在优化 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

标签: sqlpostgresql

解决方案


我会将查询重写为:

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/通常是一个不好的迹象——但不清楚你的真正意图是什么。inon


推荐阅读