oracle 查询转换

16 篇文章 0 订阅
7 篇文章 0 订阅

1、子查询展开
    SINGLE-ROW(=,<,>,<=,>=,<>),EXISTS,NOT EXISTS,IN,NOT IN,ANY,ALL
    不能做子查询展开的通常会在SQL执行计划最后一步才执行,一般是FILTER类型计划,效率很差
    IN ,EXISTS, =ANY 可转换为半连接(SEMI JOIN)
    NOT IN, NOT EXISTS, <>ALL 可转换为反连接 (ANTI JOIN)
    展开2条件:展开后语义完全等价,内嵌视图的子查询必须COST低于原SQL才展开


2、视图合并
    简单视图合并(始终合并)
    外连接视图合并(作为外连接的驱动表 非驱动表但视图定义中只包含一个表)
    复杂视图合并(COST低于原SQL才合并)


3、星型转换 针对各纬度表的限制条件,等价改写子查询附加到事实表 通过位图索引间的操作提高效率


4、连接谓词推入 把条件加入原视图定义SQL内部 COST低于原SQL才推入


5、连接因式分解 提取公共部分,避免同一个表扫描2次(11.2新特性)


6、表扩展 分区表分区索引不可用时 单独处理此分区 相当于可用分区 UNION ALL 不可用分区(11.2新特性)  COST低于原SQL


7、表移除  外键关联 外连接 可以去除不必要的表


8、 IN OR 等价  OR改写时 UNION ALL LNNVL()
       IN-LIST ITERATOR  IN所在列上必须有索引
       IN-LIST EXPANSION/OR EXPANSION  可改写为UNION ALL COST低于原SQL才改写 (可以用到不同列各自索引、分区修剪等特性)
       IN-LIST FILTER  IN后是自查询不是常量集合并不做子查询展开
       子查询展开/视图合并
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值