原始sql:



select CASE 
WHEN c.deadline >= 24 THEN 6
WHEN c.deadline >= 12 THEN 5
WHEN c.deadline >= 6 THEN 4
WHEN c.deadline >= 3 THEN 3
WHEN c.deadline >= 1 THEN 2
else 1 END as sort, count(0) counts
from t_optimization_loan p inner join (select id,CASE WHEN isDayThe = 0 THEN round(deadline/30,2) else deadline end as deadline from t_product_credit) c
on p.productId = c.id where p.optimizaId = 528596 and p.state = 1 group by sort order by sort asc;


执行计划如下:

一则SQL优化案例_执行计划

在查询过程中存在全表查询,并发量上来肯定db的负载会非常高

 

优化后:



select CASE 
WHEN temp.deadline >= 24 THEN 6
WHEN temp.deadline >= 12 THEN 5
WHEN temp.deadline >= 6 THEN 4
WHEN temp.deadline >= 3 THEN 3
WHEN temp.deadline >= 1 THEN 2
else 1 END as sort,count(0) counts
from (select CASE WHEN isDayThe = 0 THEN round(deadline/30,2) else deadline end as deadline
from t_optimization_loan p inner join t_product_credit c on p.productId = c.id
where p.optimizaId = 528596 and p.state = 1)
temp group by sort order by sort asc


一则SQL优化案例_sql_02

 


作者:Agoly​

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

如果文中有什么错误,欢迎指出。以免更多的人被误导。