需要优化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查询的帮助的主要内容,如果未能解决你的问题,请参考以下文章

需要优化SQL查询的帮助

需要帮助来优化 ORACLE SQL 查询 [关闭]

需要帮助优化 T-SQL 查询

需要帮助优化 SQL Server 查询

需要帮助优化涉及数百万条记录的非常慢的 DB2 SQL 查询

SQL查询性能优化(TimesTen)