Oracle case when改写SQL
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,Oracle case when 改写 SQL--- 说明:案例来自《 收获,不止SQL 优化 》创建测试数据:SQL > drop table t1 purge ;SQL > drop table
千家信息网最后更新 2026年11月03日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安全错误
数据库的锁怎样保障安全
精品咖啡豆
互联网与科技
互联网科技公司简介
金诺互联网科技
重庆互联网络科技
喔噻互联网科技
上海喔噻互联网科技
奇士达互联网科技
互联网科技英文翻译
互联网科技公司的市场部门
安控科技rtu产品工业互联网
卫星互联网科技股票
互联网校园科技培训
宁夏科技产业互联网案例
996高科技互联网公司
中天科技中国工业互联网
下一代互联网重大应用科技园
上海乐五互联网科技有限公司
广西科技产业互联网是什么
互联网科技自媒体灵感
科技创新与互联网经济
青岛互联网科技公司
贷财互联网科技
沃里互联网科技
互联网金融 科技创新
互联网科技圈年度人物
山东子淼互联网科技有限公司
互联网科技年终奖
上海乐五互联网科技有限公司
如何强化互联网金融科技