我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle case when改写SQL

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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;

Oracle case when改写SQL

Oracle case when改写SQL

case when改造 后的 SQL

with w_t2 as
(select
t2.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_Q
from  t2
group by t2.object_id)
select t1.object_name,t1.object_id,w_t2.* from t1,w_t2
where t1.object_id=w_t2.object_id
and t1.object_id<=50;

Oracle case when改写SQL

Oracle case when改写SQL

结论: SQL 改写后 T2 表访问次数由 6 次降到 1 次,逻辑读 consistent gets 由 320100 降到 2580 ,性能有所提升。

欢迎关注我的微信公众号"IT小Chen",共同学习,共同成长!!!

Oracle case when改写SQL

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle case when改写SQL

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SQL之CASE WHEN怎么用

小编给大家分享一下SQL之CASE WHEN怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!简单CASE WHEN函数:CASE SCORE WHEN A T
2023-06-20

sql case when的使用方法

CASE WHEN语句是SQL中的一种条件判断语句,用于根据不同的条件返回不同的值。基本语法如下:CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE r
sql case when的使用方法
2024-04-09

用case when优化Sql语句

用case when优化Sql语句 有些时候想直接从数据库查询数据,并导出,但一些类型或状态存储的是01等数字,你想显示对应的文字,这个时候就可以使用case...when语句了。结构case...when...then...when...the
用case when优化Sql语句
2020-06-19

sql中when和case啥意思

sql中的when和case是用于条件检查和返回指定值的关键字。when用于指定条件,如果条件为真,则执行随后的语句;case是控制流语句,根据满足的条件执行不同的语句,语法为:case when then when then ..
sql中when和case啥意思
2024-04-28

关于sql中case when用法

在SQL中,CASE WHEN语句是一种条件表达式,用于根据指定的条件返回不同的结果。它的基本语法如下:CASE WHEN condition1 THEN result1WHEN condition2 THEN result2...ELS
关于sql中case when用法
2024-04-09

sql中case when是什么意思

case when 语句是一种条件语句,用于根据条件评估多个表达式并返回不同值。它从上到下评估条件,返回第一个为真的条件对应的值,如果没有真条件,则返回默认值(可选)。CASE WHEN 语句定义:SQL 中的 CASE WHEN 语句
sql中case when是什么意思
2024-04-28

sql中case when语句的用法

case when 语句用于 sql 中根据指定条件评估表达式并返回不同值。它的语法包含 when 子句(条件表达式和返回表达式)、else 子句(默认表达式)和 end 关键字。它可用于各种场景,包括分配值、修改结果和转换数据格式。CAS
sql中case when语句的用法
2024-04-28

oracle中的case when怎么使用

在Oracle中,CASE WHEN语句用于根据指定的条件执行不同的操作。它的基本语法如下:CASEWHEN condition1 THEN result1WHEN condition2 THEN result2...ELSE result
2023-08-23

SQL中case when then else end用法实例

目录一、阐述二、具体使用1.已知数据按照另外一种方式进行分组,分析。2.用一个sql语句完成不同条件的分组。补充:对case when 的理解总结总结一、阐述case when then else end 可以理解为Java的if-els
2023-02-01

SQL中case when then else end用法实例

CASEWHENTHENELSEEND是一个固定搭配,这样排列是想把通过格式把逻辑展示出来,CASE告诉计算机接下来是条件句式了,下面这篇文章主要给大家介绍了关于SQL中case when then else end用法的相关资料,需要的朋友可以参考下
2023-02-01

sql中where后面能用case when吗

在 sql 中,case when 可以在 where 子句中使用。用于在条件成立或不成立时指定不同的结果,从而过滤数据,仅选择满足特定条件的行。语法为: where case when then when then ... els
sql中where后面能用case when吗
2024-05-09

oracle中的case when then怎么使用

本篇内容主要讲解“oracle中的case when then怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“oracle中的case when then怎么使用”吧!关于case whe
2023-07-05

oracle中关于case when then的使用

目录关于case when then的使用oracle语句中case when起别名总结关于case when then的使用1.首先创建两个表emp,emp_bonus如下:(1)emp_bonus:>(2)emp:2.首先对em
2023-03-01

编程热搜

目录