sql优化 用sum取代count

本文介绍了一种使用CASE WHEN语句优化SQL查询的方法,通过将COUNT(*)替换为SUM(CASE WHEN),可以更灵活地针对特定条件计数并同时获取多个统计数据。
原SQL:select count(*) as total from jpy t where t.jb='987'

修改后:
select
sum(case t.jb when '987' then 1 else 0 end) as total
from
jpy t

SQL优化例子:

select
sum(case t.jb when 987 then 1 else 0 end) as count1,
sum(case t.jb when 988 then 1 else 0 end) as count2,
sum(case t.jb when 989 then 1 else 0 end) as count3,
sum(case t.jb when 1104 then 1 else 0 end) as count4,
count(t.jb) as counTotal
from jpy t
### 如何优化包含大量计算的SQL查询性能 对于包含大量计算过程的SQL查询,优化其性能可以从多个方面入手: #### 1. 减少不必要的列读取 避免使用 `SELECT *` 是一个重要原则。仅选择所需的字段可以减少I/O开销以及网络传输的数据量,进而提高查询速度[^1]。 ```sql -- 不推荐的做法 SELECT * FROM sales; -- 推荐做法:只选取必要的字段 SELECT id, amount, date_sold FROM sales; ``` #### 2. 利用索引加速计算密集型查询 针对频繁用于过滤条件或者参与连接运算的列建立合适的索引结构,能显著加快涉及这些列的操作效率。特别是当存在复杂的聚合函数或分组操作时更为重要。 #### 3. 替代低效子查询为JOIN或其他形式 当遇到嵌套层次较深或是逻辑上可被更高效实现方式取代的情况时,应该优先考虑采用JOIN代替子查询来完成相同功能的任务,这通常会带来更好的执行效果[^3]。 #### 4. 应用EXPLAIN分析并调整查询策略 通过执行带有`EXPLAIN`关键字前缀的SQL语句可以获得关于该条指令具体是如何被执行的信息,包括访问路径的选择、使用的索引等细节。利用此工具定位潜在的问题点并对相应部分做出改进措施是非常有效的手段之一[^4]。 ```sql EXPLAIN SELECT SUM(price), COUNT(*) FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31'; ``` #### 5. 定期更新统计数据支持最优执行计划生成 保持最新的数据库统计信息有助于查询优化器作出更加合理的决策,确保每次都能挑选到最适合当前环境状况下的算法方案。这对于那些含有较多数学运算和复杂表达式的查询尤为重要[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值