oracle中sum和count可以嵌套吗_【分享吧】Oracle查询转换

前言

“查询转换”是Oracle解析SQL语句中重要的步骤。其原理是Oracle在解析时通过对原有SQL的等价改写,以达到较高执行效率的方式。

6bc35bf562136d8dabb0dcce2916eead.png

上图展示了SQL的执行过程,当客户提交的语句经过解析后,在提交给优化器之前会进行一个查询转换的步骤。在这个步骤中,Oracle会根据一些规则来决定对目标SQL进行查询转换。根据处理方式的不同,查询转换可以分为两类:

       1、基于规则的查询转化,即当满足规则定义的条件时,对语句进行相应的转化。

       2、基于成本的查询转化,即比较转换前后的SQL成本,当等价改写SQL的成本小于原始SQL成本时,进行SQL转化。

常见的查询转化有:子查询类、视图类、谓词类等。通过以下实例,对常用的查询转化进行说明。

01

子查询类

子查询是SQL中常用的写法,优化器对会对子查询提前进行评估,使得优化器可以更早地介入优化,已获得更优质的执行计划。

1、准备两张表,在子表上创建索引。

25be077e977bf731706b80e9e45cc527.png

2、通过提示PUSH_SUBQ/NO_PUSH_SUBQ对优化的子查询转换进行控制,不使用查询转换,从执行计划可见,出现了FILTER关键字,这是指执行按照T_OBJECTS和T_USERS进行了一个索引的嵌套循环,效率较低。

72367e134aeb38e3c065b212862500ee.png2ec7c54037bd53b615c6386d8b5e50f9.png

3、不使用提示,通过执行计划可看出没有出现两表嵌套,而是提前处理了子查询,先生成了MAX CREATED,然后全表扫描T_OBJECTS进行过滤,显然这种方式效率更高。

33f8bae8f4adb3c7f76106b73a33acbe.pnga319f7acb3c8884f25c0a2674c6672e3.png

02

视图类

在视图类的查询转换中最常用的就是视图合并,是指优化器将视图定义的语句进行拆解,不作为整体执行,而是将其定义的语句与外部查询合并起来,再由优化器选择执行计划。

1、创建一个带有过滤条件的视图,并对这个视图进行带过滤条件的查询。在执行计划中可以看出已经没有视图对象出现。视图内部的过滤条件OWNER=’SYS’和外部的过滤条件OBJECT_ID=10都被合并在一起并转换为基表T_OBJECTS的过滤条件。

220fe2b648aaa911877fe089b386b0ff.png057fd72ab511a0828fa6885c2990fb39.png

2、同修改隐含参数,不允许进行简单视图的合并。从执行计划中可以看到出现“VIEW”字样,即没有进行视图合并。

4bf760f04f6a3bddb5a9290642891f56.png846f6ded54f1d18c0feeca69a630affb.png

03

谓词类

谓词是指SQL语句中WHERE部分对数据过滤条件。Oracle优化器会将SQL语句中谓词的整体考虑,进行谓词转化。例如:如果存在视图,可以将视图外部的过滤条件推入视图中,这样做可以尽早过滤数据,提高查询效率。

1、新建一个带有过滤条件的视图,然后进行查询。我们看到执行计划没有看到谓词推入,原因是这里采用了前面说的到视图合并。

e19366e5bbc2d5ae6b94755c00e23e5a.png523647ea142be17a53de68ec3a209e2a.png

2、使用no_merge提示后我们看到在ID=1的步骤里可以看到VIEW字样,即视图没有进行合并。再看一下ID=2的步骤,由Predicate Information可见,过滤条件是STATUS=‘VALID’ AND OBJECT_ID=20。可见这里的条件不仅包括视图定义中对表的过滤条件,还包括了从外部传入的过滤条件。即过滤谓词被推入了视图定义中。

b36a693826a3b2fef4527ad95451c025.pngb55a2432cf6a5c9afbc10190a135e63d.png

04

消除类

消除类是指优化器在生成执行计划之前通过分析,省略SQL中的部分内容。当然消除前后的SQL语句一定是等价的。

1、排序消除,是指在优化器再生成执行计划前,将语句中没有必要的排序操作消除,避免在执行计划中出现排序操作或由排序导致的操作。

看下面查询语句中的排序不是必须的,从Statistics的Sorts部分可以看出都是0,可以看出优化器在生成执行计划时,对排序进行了消除。

3360b0161468b7d080a9074320c54c12.png

2、去重消除,是指如果语句中对象存在主键或唯一约束,那么语句中的DISTINCT是可以消除的。

新建一张表,进行DISTINCT查询。通过下面的执行计划,可以看到默认走了全面扫描,然后用HASH进行了去重。

ca41681970a4e49a2fa5840b29ba8c61.png

通过给T_USERS增加唯一索引后,再进行查询。通过执行计划可以看出是直接通过新增榆树UK_USERNAME的索引完成了扫描,不需要再去重了。

3f05cca2e8ca81660a117cee809fc2d3.png

3、表消除,是指两表关联且存在主外键关系时,优化器可以消除不必要的表访问以提高效率。

首先创建T_TABLES、T_TABLESPACES两张表,并创建他们之间的外键关系,并对T_TABLES进行查询。虽然SQL中关联到了T_TABLESPACES,但其实是不需要的。所以通过执行计划可以看到优化器对T_TABLESPACE进行了消除。

f1ae7d75130f5c93721c59d7e939cc4f.png5c34d899fec69261e71c7f10175ed63e.png

除了以上介绍的查询转换,Oracle优化器还会对OR、LIKE、IN、BETWEEN、NOT、常量等进行查询转换,以生成更加合理的的执行计划,提高查询效率。希望通过对Oracle查询转换的介绍,能让大家对Oracle优化有更进一步的了解。

49377d99b20ecd8e56c596b4c45f376d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何正确地部署防火墙?

防火墙在实际的部署应用过程当中,经常部署在网关的位置,也就是经常部署在网内和网外的一个"中间分隔点"上,而就是在这样一个部署的环境中,也还存在着多种方式,且存在着许多"陷阱",本文…

男人是大猪蹄子的证据找到了!

1 老师!2 您倒也不必如此诚实3 哈哈哈哈哈哈这也太显眼了4 圆的面积其实可以这样算5 喵:进不去......好烦!!6 狗子:好好扔,砸我干嘛?你到底会不会玩?!7 男人是大猪蹄子的…

set-cookie 和 cookie 的区别_Go Web 编程如何确保Cookie数据的安全传输

什么是CookieCookie(也叫Web Cookie或浏览器Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。通常,它用于告知服务端两个请求是否来自同一浏览器,如保持用户的登…

使用C#快速生成顺序GUID

前言通常,我们采用数值ID(long)/GUID作为全局唯一标识符。但是,在多线程、高并发情况下,由应用程序生成数值ID容易产生重复,而由数据库生成又会造成性能瓶颈。而使用Guid.NewGuid()生成的GUID虽然不会重复,但是它是无序…

带你见识世界的5部纪录片(免费领取)

全世界只有3.14 % 的人关注了爆炸吧知识纪录片一直都是增长见识又带给你力量的东西,你可能忙于学业、生活、工作而不能行万里路,但至少你还可以看纪录片,从一方屏幕看到整个世界。今天就为大家整理了5部高分纪录片,文末附领取方式…

Android简明开发教程二十一:访问Internet 绘制在线地图

在例子Android简明开发教程十七:Dialog 显示图像 中我们留了一个例子DrawMap()没有实现,这个例子显示在线地图,目前大部分地图服务器都是将地图以图片存储以提高响应速度。 一般大小为256X256个像素。具体可以参见离线地图下载方法解析 。 比…

url采集工具_大数据关键技术浅谈之大数据采集

在前几篇文章中,企通查为大家介绍了大数据处理的基本流程。从大数据的一系列处理过程中(抽取、集成、分析、解释),我们可以发现这一整套流程中涵盖了数据存储、处理、应用等多方面的技术。大数据价值的完美体现需要多种技术的协同…

使用 WPF + Chrome 内核实现 在线客服系统 的复合客服端程序

本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程。本产品已经成熟稳定并投入商用。免费使用 & 私有化部署免费下载:https://docs.shengxunwei.com/Post/f7bc8496-14ee-4a53-07b4-08d8e3da6269视频实拍:演示升讯威在线…

abp框架java,【Net】ABP框架学习之正面硬钢

前言本文介绍另一种学习ABP框架的方法,该方法为正面硬钢学习法。。。我们不去官网下载模板,直接引用DLL,直接使用。WebApi项目创建首先创建一个WebApi项目,结构如下。然后Nuget搜索ABP,安装ABP框架。(我这里安装的是5.…

不同对象的通话是时长​

1 一个专门为某人打造的形容词2 当代人的手机铃声3 “可以吃宵夜吗”“不行” 4 好可爱!!!5 这不是道具,是真的红酒杯里倒着红酒叠在硬币上!6 这14个未接电话就很有灵性了!7 你觉得以下哪个事件给你的痛苦感…

poj 1088 滑雪 详解

http://poj.org/problem?id1088 这是一道dp入门题,不过我一直没想明白应该怎么dp。今天,在做自己学校oj的算法基础题时看到这题,标注着dp的分类,加上我一直都比较喜欢做dp题,于是我就决心今晚要把这道入门题切了。 题…

python find函数_Python 速学!不懂怎么入门python的小白看这篇就够了!

Python是一种非常流行的脚本语言,而且功能非常强大,几乎可以做任何事情,比如爬虫、网络工具、科学计算、树莓派、Web开发、游戏等各方面都可以派上用场。同时无论在哪种平台上,都可以用 Python 进行系统编程。本文讨论基本的 Pyth…

前端开发的盛宴

想写这篇文章由来已久,目的是想回顾一下基于Web技术的开发技术和流程的变迁,以及其背后的原因或规律。我依然记得,很多年前做出来第一个公司网站时的激动心情(加班到晚上,兴奋地在空旷的办公室走来走去)&am…

datav本地部署 java,Spring Boot对Spring Data JPA的自动配置

一 点睛Spring Boot对Spring Data JPA的自动配置放置在如下路径:二 源码分析1 JpaRepositoriesAutoConfiguration类分析ConfigurationConditionalOnBean(DataSource.class)ConditionalOnClass(JpaRepository.class)ConditionalOnMissingBean({ JpaRepositoryFactory…

靠拿奖学金完成学业后,博士生为女友放弃年薪30万工作选择留校任教

全世界只有3.14 % 的人关注了爆炸吧知识“相恋八年,一路陪伴。研究生毕业后,博士生决定为女友放弃年薪30万的工作选择留校任教,因为曾和女友约定一起当老师。好的科研爱情,或许就是这样携手前进。索长友是哈尔滨理工大学的博士生&…

小菜学设计模式——观察者模式

2019独角兽企业重金招聘Python工程师标准>>> 背景 上一次去看电影院看电影,半旁边的妹子说只要扫一扫就能免费领取爆米花一份,你说我怎么躲得过妹子的招数呢?所以拿起我的手机,扫一扫,注册会员&#xf…

获取 子文件夹 后缀_CSDN学院第一个Ptython Homework-- 递归统计文件夹大小

作业:通过第一周学习的内容,自主编写一个py文件,能够递归文件夹大小,并将统计后的大小进行格式化输出.作业体现形式:以代码的方式保存成后缀为py的脚本.作业的注意事项:1.文件名命名规范.2.注释清晰.3.运行结果符合预期效果 .思路提示:1.使用python内置的os模块来进行文件相关的…

java 链表逆序 递归,java用递归和非递归实现链表逆序

传统的逆序链表方法是使用三个指针来记录节点的状态,防止链表断裂。Node节点public class Node {private int data;private Node next;public Node(int data){this.data data;next null;}public int getData() {return this.data;}public void setData(int data) …

史上最硬核老师:17年间,拿着菜刀把400个混混送进了哈佛耶鲁麻省!

全世界只有3.14 % 的人关注了爆炸吧知识今天,来给大家介绍一位硬核教师Jaime Escalante——手握杰斐逊奖、自由精神奖,拿着菜刀把400个混混送进了哈佛耶鲁麻省。海梅斯埃斯卡兰特(Jaime Escalante)初出茅庐1930年12月31日,Jaime出生于玻利维亚…

数据库表设计

数据库表设计 分析上述各实体的属性集,从中找出关系的主键,然后用关系式来表示实体(其中下划线的属性为主键)。表4-1至表4-5分别给出了主要表结构各实体的属性如下: 表4-1 admin 表名称 主要字段 数据类型 长度 属性 输入方式 描述 …