请求改写指定SQL查询语句以提升其执行性能
优化后的SQL查询语句
性能瓶颈分析
原查询存在几个影响性能的问题:
EXTRACT(YEAR FROM sale_date)用函数包裹字段,导致sale_date上的索引无法被利用,数据库不得不全表扫描Sales表数据- JOIN条件疑似笔误(
s.product.id应为s.product_id),不符合常规的表关联逻辑 GROUP BY product_id与SELECT中的p.product_name在部分数据库(如PostgreSQL、MySQL严格模式)中会触发语法错误,因为非聚合列未被包含在分组条件里
优化后的代码
SELECT p.product_name, SUM(s.sale_amount) AS total_sales FROM Sales s JOIN Product p ON s.product_id = p.product_id WHERE sale_date >= DATE_TRUNC('year', CURRENT_DATE) AND sale_date < DATE_TRUNC('year', CURRENT_DATE) + INTERVAL '1 year' GROUP BY p.product_id, p.product_name
优化说明
- 索引友好的过滤条件:改用范围查询替代函数提取年份,让数据库能直接使用
sale_date字段上的索引快速定位当年数据,大幅减少扫描行数 - 修正关联逻辑:将疑似笔误的
s.product.id修正为s.product_id,匹配Sales表存储产品ID的常规设计 - 规范分组逻辑:把
p.product_name加入GROUP BY,避免数据库语法校验错误,同时保证分组逻辑严谨(确保一个product_id对应唯一的product_name)
内容的提问来源于stack exchange,提问作者David Billa
相关产品推荐
相关产品推荐

