Oracle case when改写SQL
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,Oracle case when 改写 SQL--- 说明:案例来自《 收获,不止SQL 优化 》创建测试数据:SQL > drop table t1 purge ;SQL > drop table
千家信息网最后更新 2025年11月10日Oracle case when改写SQL
Oracle case when 改写 SQL
--- 说明:案例来自《 收获,不止SQL 优化 》
创建测试数据:
SQL > drop table t1 purge ;
SQL > drop table t2 purge ;
SQL > create table t1 as select * from dba_objects ;
SQL > create table t2 as select * from dba_objects ;
SQL > update t2 set status = 'INVALID' WHERE ROWNUM <= 10000 ;
SQL > update t2 set generated = 'Y' WHERE ROWNUM <= 10000 ;
SQL > update t2 set temporary = 'Y' WHERE ROWNUM <= 10000 ;
SQL > update t2 set temporary = 'M' WHERE temporary <> 'Y' ;
SQL > update t2 set temporary = 'Q' WHERE temporary <> 'Y' or temporary <> 'M' ;
SQL > COMMIT ;
SQL > set autotrace traceonly
SQL > set linesize 1000
原 SQL :
SQL> select t1.object_name, t1.object_id, (select count(*) from t2 where temporary = 'Y' and t2.object_id = t1.object_id) CNT_TEMPORARY_Y, (select count(*) from t2 where created >= sysdate - 365 and t2.object_id = t1.object_id) CNT_CREATED_NEW, (select sum(object_id) from t2 where status <> 'VALUD' and t2.object_id = t1.object_id) SUM_OBJID_STATUS_V, (select sum(object_id) from t2 where generated = 'Y' and t2.object_id = t1.object_id) SUM_OBJID_GENERATED_Y, (select sum(object_id) from t2 where generated = 'M' and t2.object_id = t1.object_id) SUM_OBJID_GENERATED_M, (select sum(object_id) from t2 where generated = 'Q' and t2.object_id = t1.object_id) SUM_OBJID_GENERATED_Q from t1 where t1.object_id <= 50;


case when改造 后的 SQL :
with w_t2 as(selectt2.object_id,count(case when t2.temporary='Y' then 1 end ) CNT_TEMPORARY_Y,count(case when created >=sysdate-365 then 1 end ) CNT_CREATED_NEW,sum(case when t2.status<>'VALID' then t2.object_id end ) SUM_OBJID_STATUS_V,sum(case when t2.generated = 'Y' then t2.object_id end ) SUM_OBJID_GENERATED_Y,sum(case when t2.generated = 'M' then t2.object_id end ) SUM_OBJID_GENERATED_M,sum(case when t2.generated = 'Q' then t2.object_id end ) SUM_OBJID_GENERATED_Qfrom t2group by t2.object_id)select t1.object_name,t1.object_id,w_t2.* from t1,w_t2where t1.object_id=w_t2.object_idand t1.object_id<=50;
结论: SQL 改写后 T2 表访问次数由 6 次降到 1 次,逻辑读 consistent gets 由 320100 降到 2580 ,性能有所提升。
欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!
公众
性能
数据
案例
次数
结论
逻辑
学习
改造
测试
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
原神国际服一般用哪个服务器
网络安全大赛大学生
坦克世界 东南亚服务器
最新版国际服吃鸡怎么改服务器
腾讯情侣空间连接服务器异常
网络安全试题 以答案
直播卖货服务器怎么选择
员工网络安全培训资料
可以检索期刊论文的数据库
浪潮服务器设置从raid启动
中央台关于网络安全的报道
服务器引导文件怎么打开
阿里云 云服务器学生
dj数据库的原理
闵行区营销软件开发管理方法
什么是软件开发过程创意
餐饮软件开发高性价比的选择
网络安全与法律目的
九州天空城服务器列表
我的世界做服务器如何扔雪球回城
Linuxpg数据库时间
个人电脑怎样建立数据库
西安高新区国家网络安全宣传片
v2服务器免流
辽宁省工会网络安全
3650服务器管理密码
圣盾网络安全
软件开发主管工作描述
工资管理数据库sql设计
白云峰科技与互联网