当前位置: 首页 > news >正文

基于Oracle的SQL优化--学习(十五)

复杂视图合并

    复杂视图合并(ComplexViewMerging)是指针对那些所带视图的视图定义SQL语句中含有groupby或distinct的目标SQL的视图合并。

    和简单视图合并、外连接视图合并一样,对这种视图定义SQL语句中含有groupby或distinct的复杂视图做视图合并也同样意味着要把其定义SQL语句拆开,并把其中的基表拿出来和外部査询中的表合并。这通常意味着上述视图定义SQL语句中的groupby或distinct操作会被推迟执行,也就是说,这种情况下通常会先做表连接,再做groupby或distinct操作,而不是像未做复杂视图合并时那样先在视图内部做完groupby或distinct操作,然后才和外部查询中的表做表连接。

    复杂视图合并所对应的这种groupby或distinct操作的延迟,并不一定总是能带来执行效率以及性能上的提升。例如,如果groupby或distinct操作能过滤掉绝大部分的数据且表连接并不能有效过滤数据的话,那么先在视图内部做groupby或distinct操作,然后才和外部查询中的表做表连接的执行效率就会更高一些;但如果表连接能过滤掉绝大部分的数据而groupby或distinct操作并不能有效过滤数据的话,那么先做表连接,再做groupby或distinct操作的执行效率显然会更好一些。

    正是因为复杂视图合并并不一定总是能带来目标SQL的执行效率及性能上的提升,所以在Oracle10g及其以后的版本中,对于复杂视图合并,只有当经过复杂视图合并后的等价改写SQL的成本值小于原SQL的成0本值时,Oracle才会对目标SQL执行复杂视图合并。

    

星型转换

    星型转换(StarTransformation)是优化器处理表连接方法为星型连接的目标SQL时的一种优化手段,它的核心是将原星型连接中针对各个维度表(DimensionTable)的限制条件,通过等价改写的方式以额外的子査询施加到事实表(FactTable)上,然后再通过对事实表上各连接列上已存在的位图索引间的位图操作(如按位与、按位或等),来达到有效减少事实表上待访问的数据量,避免对事实表做全表扫描的目的,这就可以有效缩短原目标SQL的执行时间,提高其执行效率。

    星型转化的核心是将原星型连接中针对各个维度表的限制条件通过等价改写的方式以额外的子查询施加到事实表上,然后再通过对事实表上各个连接列上已存在的位图索引间的位图操作来达到有效减少事实表上带访问的互数据量,避免对事实表做全表扫描。





相关文章:

  • 基于Oracle的SQL优化--学习(十六)
  • Python获取amap高德地图
  • 基于Oracle的SQL优化--学习(十七)
  • JDK、Spring、Quartz等几种不同定时器的用法,以及cronExpression表达式定义
  • hibernate,将原生SQL执行的结果转换为Map
  • Stimulsoft Reports.Net基础教程(四):创建主从报表②
  • IntelliJ IDEA解决创建maven web项目慢的问题
  • 一些使用IDEA的诀窍
  • Tomcat启动时,webapps目录下的项目没有加载
  • 马哥预习视频
  • Document base xxx does not exist or is not a readable directory
  • 一位资深程序员大牛给予Java初学者的学习路线建议
  • WITH AS的用法
  • pivot的用法
  • POJ1840 Eqs(hash)
  • php的引用
  • JS 中的深拷贝与浅拷贝
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • CSS居中完全指南——构建CSS居中决策树
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • EOS是什么
  • ERLANG 网工修炼笔记 ---- UDP
  • input的行数自动增减
  • JavaScript 基础知识 - 入门篇(一)
  • Java编程基础24——递归练习
  • Redis学习笔记 - pipline(流水线、管道)
  • VUE es6技巧写法(持续更新中~~~)
  • vue-loader 源码解析系列之 selector
  • Web Storage相关
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 分布式事物理论与实践
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 深入浅出webpack学习(1)--核心概念
  • 思维导图—你不知道的JavaScript中卷
  • 算法---两个栈实现一个队列
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 项目实战-Api的解决方案
  • 写代码的正确姿势
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • nb
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​io --- 处理流的核心工具​
  • # 飞书APP集成平台-数字化落地
  • #14vue3生成表单并跳转到外部地址的方式
  • #pragma multi_compile #pragma shader_feature
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (SpringBoot)第二章:Spring创建和使用
  • (多级缓存)缓存同步
  • (翻译)Quartz官方教程——第一课:Quartz入门