sql - 在优化 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
推荐阅读
- django - 在 Django 中从 json 提要创建模型
- docker - Docker Swarm:restart-policy 不允许附加属性 restart-policy
- sql - sql在日期范围内查找
- java - 如何通过 Chocolatey 安装 android sdk 组件
- mysql - 按组限制而不省略重复项?
- java - Maven 配置文件使用单个 pom.xml 指向不同的配置文件
- java - Liquibase 不工作
- c++ - 使用fftw图像中间的直流分量
- php - 在 Woocommerce 中的计费详细信息之前添加新的自定义结帐字段?
- python - 在 python 上查找与源图像内容相似的图像