Oracal执行计划解析
概述
| Id | Operation | Name | Rows | Bytes | TempSpc | Cost (%CPU) | Time |
-----------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10000 | 120000| 0 | 20000 (100)| 00:00:01 |
| 1 | SORT AGGREGATE | | 1 | 120 | | 20000 (100)| |
| 2 | INDEX FAST FULL SCAN | IDX_Employee_LastName | 10000 | 120000| 0 | 10000 (10)| |解释:
| Id | - 表示执行计划的步骤编号,从0开始,按执行顺序递增。
| Operation | - 描述数据库执行的具体操作类型,如:SELECT STATEMENT、SORT AGGREGATE、INDEX FULL SCAN等。
| Name | - 操作所涉及的对象名称,如索引名、表名等。
| Rows | - 预估的执行此操作将读取或产生的行数,是Oracle优化器根据统计信息做出的估算。
| Bytes | - 预估处理的字节数,反映了操作所需处理的数据量。
| TempSpc | - 指定此步骤是否会使用临时段(临时空间),如果是,显示所需的临时空间大小(单位通常是KB)。
| Cost (%CPU)| - 执行此步骤的总成本估计,包括CPU成本和I/O成本,用于衡量不同执行计划的相对代价。
| Time | - 预测的执行时间,但通常在实际运行中会有差异,主要用于优化器决策。举例说明:
第一行表示整个SQL语句(SELECT STATEMENT),预估处理10000行数据,总共120000字节,总成本是20000(其中100%是CPU成本),预计耗时1秒。
第二行是一个排序聚合操作(SORT AGGREGATE),生成1行结果,共120字节。
第三行是一个索引快速全扫描(INDEX FAST FULL SCAN),同样处理10000行数据,总成本较低,使用索引IDX_Employee_LastName进行扫描,不需要临时空间。
使用方式
EXPLAIN PLAN FOR 查询语句
ID(每个流程的唯一标识):
ID(Id)列代表了执行计划中不同操作步骤的唯一标识符。
即:每个流程的唯一标识
Operation(具体操作,执行顺序):
“Operation”列展示了数据库为了执行SQL语句而采取的不同操作步骤。这些操作涵盖了从数据源访问、过滤、排序、连接、聚合等多种数据库内部处理行为
1:执行的操作
2:执行的顺序(缩进越多,越先执行)
同一级的动作执行时遵循最上最右先执行的原则
可能会出现操作明细
1. SELECT STATEMENT:
-
- 整个查询的起点,标识SQL语句的整体执行计划。
2. 全表扫描:TABLE ACCESS FULL:
-
- 全表扫描,即对整个表的所有数据进行线性读取,没有利用任何索引。
3. 索引扫描:INDEX SCAN:
-
- 索引扫描,包括但不限于:
-
-
- INDEX RANGE SCAN: 根据索引范围条件检索数据。
- INDEX UNIQUE SCAN: 当唯一索引被用来直接定位一行数据时。
- INDEX FAST FULL SCAN: 对索引进行类似全表扫描的操作,但比全表扫描可能更快,因为它可能避免了额外的排序和行链接操作。
-
4. 排序:SORT:
-
- 排序操作,例如:
-
-
- SORT ORDER BY
- SORT GROUP BY: 对数据进行分组前的排序。
- SORT AGGREGATE: 聚合操作,如SUM、COUNT、AVG等,可能伴随排序。
-
5. 表连接方式:JOIN:
-
- 表连接操作,例如:
a. 嵌套循环连接:小表连大表:NESTED LOOPS JOIN: 最常见的连接类型之一。
工作原理: 嵌套循环连接是最基础的连接方法,它的工作原理类似于嵌套循环,外层循环逐行遍历一个表,内层循环则针对每一行去另一个表中查找匹配的记录。其性能很大程度上依赖于内外表的大小以及索引的有效性。性能特点:当外表较小或者内外表之间有很好的索引关联时(如外表通过主键连接内表的唯一索引),嵌套循环连接效率非常高。
若外表庞大而内表没有合适的索引,或者连接条件没有利用到索引,这种连接方式可能会很慢,因为它可能需要进行大量的索引查找或全表扫描。
b. 合并连接(内存不足用这个):排序好的表进行连接:MERGE JOIN: ,适用于已经排序或者部分排序的数据。
工作原理: 合并连接要求两个表都已经排序好(或者可以利用现有索引达到排序效果),然后将两个排序好的数据流进行合并,匹配相同的键值来进行连接。合并连接可以有效地利用索引和排序,无需额外的临时空间。
性能特点:
● 当两个表都很大,但都已排序或可以利用索引进行有效的排序时,合并连接效率很高。
● 如果数据量巨大,内存不足以一次性装入所有数据,但有足够的磁盘空间和合理的I/O速度,合并连接可以通过多轮排序和合并逐步完成,性能较好。
c. HASH JOIN: 使用哈希算法来匹配两表之间的记录。
6. 哈希连接(HASH JOIN)
工作原理: 哈希连接首先将一方表构建哈希表,然后扫描另一方表,对每一行计算哈希值并查找哈希表,通过哈希索引快速找到匹配项。哈希连接需要足够的内存来存储哈希表。
性能特点:
● 当两个表都非常大,并且内存充足时,哈希连接通常比嵌套循环连接更快,因为它避免了大量索引查找操作。
● 如果内存不足,哈希连接可能需要溢出到磁盘,这会显著降低性能,但即使如此,有时仍可能比其他连接方式更快,尤其是在大规模数据处理中。
总结起来,选择哪种连接方式最为高效,通常取决于表的大小、索引的存在和有效性、内存资源、磁盘I/O能力等因素。在实际应用中,Oracle数据库的优化器会根据统计信息和成本模型自动选择最优的连接方式。在特定场景下,也可能需要通过手工hints等方式指导优化器选择合适的连接方法。
7. 过滤:FILTER:
-
- 过滤操作,应用于WHERE子句中的条件筛选。
8. INDEX SKIP SCAN:
-
- 索引跳跃扫描,仅读取索引的一部分来满足查询需求。
9. 分区操作:PARTITION RANGE ALL / SINGLE / ITERATOR:
-
- 分区表相关的扫描操作,针对分区表中的特定分区或所有分区。
10. 视图操作:VIEW:
-
- 视图操作,数据库处理视图逻辑的方式。
11. rowID查询:TABLE ACCESS BY INDEX ROWID:
-
- 通过索引获取行地址(ROWID),随后进行单行的表访问。
每一个“Operation”都是SQL执行流程中的一个阶段,Oracle优化器会选择成本最低的执行路径来执行SQL语句,从而尽可能提高查询效率。通过分析执行计划中的Operation序列,可以深入了解数据库是如何实际处理SQL查询请求的,并据此进行性能优化。
备注:表的访问方式
● 全表扫描table access full
- Oracle 会读取表中所有的行,并检查每一行是否满足 where 限制条件
- 全表扫描时可以使用多块读(一次 I/O 读取多块数据块)操作,提升吞吐量
● rowid 扫描table access by rowid(单行存取他最快)
- rowid:伪列,Oracle 自带的,不会存储 rowid 的值,不能被增、删、改
- 一旦一行数据插入后,则其对应的 rowid 在该行的生命周期内是唯一的,即使发生行迁移,该行的 rowid 值也不变
简述:查询时,先找索引树,根据索引树存储的rowid信息,拿到rowid对应的行。
rowid简述:行的唯一ID。(还包含有关数据在数据库物理存储结构中的具体位置信息。)
● 索引扫描table access by index scan
索引唯一扫描:index unique scan(主键唯一索引专用,只返回一条数据)
- 每次至多返回一条记录
- 有下列两种情况(当查询字段有下列约束时)
-
- unique (唯一索引)
- primary key (主键ID)
索引范围扫描:index range scan(携带范围条件会用他)
- 每次至少返回一条记录
- 一般有下列三种情况
-
- 在唯一索引列上使用了范围操作符(如:> < >= <= between)
- 在组合索引上,只使用部分列进行查询(查询时必须包含前导列,否则会走全表扫描)
- 对非唯一索引列上进行的任何查询
索引全表扫描:index full scan
扫描索引并排序返回
索引快速扫描:index fast full scan
扫描索引 不 排序返回
索引跳跃扫描(组合索引专用):index skip scan
- 必须是 组合索引
- 除了前导列(索引中第一列)外的其他列作为条件
说明了:MYSQL不允许打破的规则被ORACAL打破了 (本人的理解)
ABC为联合索引,
MYSQL:可用:A,AB,ABC
ORACAL:A,AB,ABC,AC,BC
NAME(每个步骤涉及的表名,索引名等)
"Name"列通常表示的是执行计划中涉及的具体数据库对象,例如表名、索引名、视图名或者是其他类型的数据库对象,如分区、物化视图等。每个操作步骤(Operation)都会关联到一个或多个数据库对象,"Name"列就用来展示这些操作所作用的具体对象。
| Id | Operation | Name |
-------------------------------------------------
| 1 | TABLE ACCESS FULL | Customers |
| 2 | INDEX RANGE SCAN | PK_Products |
| 3 | SORT JOIN | |
| 4 | TABLE ACCESS BY INDEX ROWID| Orders |
- 在第一个操作步骤中,"Name"是"Customers",表示执行了一个全表扫描操作在"Customers"表上。
- 第二个步骤使用了名为"PK_Products"的索引进行了索引范围扫描。
- 第四个步骤使用索引行ID访问了"Orders"表,这里的"Name"为空是因为该步骤是通过前面的索引扫描间接访问的。
通过分析执行计划中的"Name"列,我们可以清楚地了解到数据库执行SQL语句时访问的具体数据来源,这对于性能调优和理解查询执行过程至关重要。
Rows(操作预计涉及的行数)
K是千
M是万
Bytes(预计处理的数据量)
TempSpc(临时表)
存在此行,说明使用临时表,展示的是临时表占用的内存。
不存在此行,说明未使用临时表
Cost (%CPU) (预计CPU使用情况)
Cost (%CPU)列表示Oracle优化器对执行某个操作预计耗费的CPU成本的度量。这个成本不仅包括CPU时间,还包括内存和I/O操作的成本,但通常以CPU时间作为主要参考基准。Cost (%CPU)列的值是一个相对成本,用于比较不同执行计划的成本,从而帮助优化器选择成本最低的执行计划。
| Id | Operation | Name | Rows | Bytes | Cost (%CPU) |
----------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1000 | 8000 | 10000 (1) |
| 1 | SORT AGGREGATE | | 1 | 12 | 1000 (1) |
| 2 | TABLE ACCESS FULL| Employees | 1000 | 8000 | 1000 (1) |
在这个例子中:
- Id 为 2 的 TABLE ACCESS FULL 操作预计的总成本是 1000 (1),这意味着Oracle估计执行全表扫描 Employees 表大概会花费相当于1000个CPU单位的工作量,其中 (1) 表示大致的CPU成本占比为100%。
- Id 为 1 的 SORT AGGREGATE 操作预计的成本是 1000 (1),这表示排序和聚合操作大约需要1000个CPU单位的工作量。
- Id 为 0 的 SELECT STATEMENT 总体成本是 10000 (1),这是整个查询的预计总成本,包括子操作的成本。
优化器会综合考虑Cost (%CPU)以及其他因素(如Rows、Bytes、TempSpc等)来确定最佳执行计划,旨在选择成本最低且能最快得到查询结果的方案。但要注意,实际运行时的成本可能会与预估成本有所出入,因为预估是基于当前的统计信息和Oracle的优化算法得出的。
相关文章:
Oracal执行计划解析
概述 | Id | Operation | Name | Rows | Bytes | TempSpc | Cost (%CPU) | Time | ----------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | 1…...
对form表单对象中数组中的字段进行校验的方法
当对form表单中,数组readings中的字段进行校验时,prop和rules绑定要写成动态的,如下代码 <div v-for"(item,index) in form.readings"><el-form-item label"上次读数" > <!--prop"scds"-->…...
一、JAVA集成海康SDK
JAVA集成海康SDK 文章目录 JAVA集成海康SDK前言一、项目依赖 jar1. examples.jar2. 项目依赖 jna.jar,可以通过 maven依赖到。二、集成SDK1.HcNetSdkUtil 海康 SDK封装类2.HCNetSDK3.Linux系统集成SDK三、总结前言 提示:首先去海康官网下载 https://open.hikvision.com/dow…...
PAT 乙级 1031 查验身份证 c语言实现
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1&am…...
LeetCode 345. 反转字符串中的元音字母
给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。 元音字母包括 ‘a’、‘e’、‘i’、‘o’、‘u’,且可能以大小写两种形式出现不止一次。 示例 1: 输入:s “hello” 输出:“holl…...
go中函数与方法的区别与go中关于面向对象理解
声明方法的区别 函数是一段可以独立调用的代码块,它可以有参数和返回值。函数的声明不依赖于任何类型,可以直接通过函数名进行调用。 函数的声明格式如下: func functionName(parameters) returnType {// 函数体 }示例: func A…...
SQL Server 实验二:数据库视图的创建和使用
目录 第一关 相关知识 什么是表 操作数据表 创建数据表 插入数据 修改表结构 删除数据表 编程要求 第一关实验代码: 第二关 相关知识 视图是什么 视图的优缺点 视图的优点 视图的缺点 操作视图 创建视图 通过视图向基本表中插入数据 通过视图修改基本表的…...
树结构导入
Testpublic void testExcel1() {// 写法1:JDK8 ,不用额外写一个DemoDataListener// since: 3.0.0-beta1EasyExcelFactory.read(new File("C:\\Users\\Admin\\Desktop\\树导入.xlsx"), null, new ReadListener<Map>() {public static final int BATC…...
Promise封装ajax
Promise封装原生ajax 1.node的内置模块url, http 2.Promise封装原生ajax 01-node的内置模块 # url: 操作网址 let url require(url) url.parse(网址, [布尔值: 决定是否将查询字符串转换为对象格式]): 将网址解析成对象# http: 创建本地服务器 let http requi…...
47 vue 常见的几种模型视图不同步的问题
前言 这里主要是来看一下 关于 vue 中的一些场景下面 可能会出现 模型和视图 不同步更新的情况 然后 这种情况主要是 vue 中的对象 属性没有响应式的 setter, getter 然后 我们这里就来看一下 大多数的情况下的一个场景, 和一些处理方式 当然 处理方式主要是基于 Vue.set, …...
以太网/USB 数据采集卡 24位16通道 labview 256K同步采样
XM7016以太网SUB数据采集卡 XM7016是一款以太网/USB高速数据采集卡,具有16通道真差分输入,24位分辨率,单通道最高采样率256ksps. 16通道同步共计4.096Msps、精密前置增益放大、集成IEPE/ICP硬件支持的特点。本产品采用了多个高精度24位ADC单元…...
python基础 | 核心库:PIL
1、读取图像信息 查看图像信息 读取同一文件夹下的文件 可加 ./可不加 rom PIL import Image img Image.open(image.jpg) # 打开图像文件(注意:是去掉文件头的纯数据) print(img.format) # 图像格式(如BMP PNG JPEG 等) print(img.size) # 图像大小(…...
#Linux系统编程(共享内存)
(一)发行版:Ubuntu16.04.7 (二)记录: (1)什么是共享内存 共享内存是System V版本的最后一个进程间通信方式。共享内存,顾名思义就是允许两个不相关的进程访问同一个逻辑…...
蓝桥杯备考随手记: practise01
问题描述: 小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包 括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。 请问,在 1 到 2019 中,所有这样的数的和是多少? 思路分析…...
【openGL4.x手册09】转换反馈
目录 一、说明二、着色器设置2.2 捕获的数据格式2.2 高级交错2.3 双精度和对齐2.4 In-shader规范 三、缓冲区绑定四、反馈过程五、反馈对象5.1 反馈暂停和恢复5.2 绑定暂停的反馈对象。 六、反馈渲染七、局限性 一、说明 转换反馈是捕获由顶点处理步骤生成的基元的过程…...
记录一次报错提示npx update-browserslist-db@latest
1,定位文件夹位置 找到HBuilderX的安装目录, cmd切换到HBuilderX/plugins/uniapp-cli下 删除node_modules以及package-lock.json 在当前目录执行npm install 重新打开HBuilderX运行 2, 删除后,再次通过hbuilderX启动微信小程序,会…...
【Go】二、Go的基本数据类型
文章目录 0、进制1、变量的声明2、数据类型3、整型4、浮点型5、字符类型6、布尔类型7、字符串类型8、基本数据类型的默认值9、类型转换10、基本类型转String11、String转其他类型 0、进制 N进制,逢N进一 1、变量的声明 //声明 赋值 var age int 18//声明、赋值、…...
十一、Spring源码学习之registerListeners方法
registerListeners()方法 protected void registerListeners() {// Register statically specified listeners first.//获取容器中事件监听并存放到多播器中 applicationListenersfor (ApplicationListener<?> listener : getApplicationListeners()) {getApplicationE…...
Oracle 控制文件详解
1、控制文件存储的数据信息 1)数据库名称和数据库唯一标识符(DBID) 2)创建数据库的时间戳 3)有关数据文件、联机重做日志文件、归档重做日志文件的信息 4)表空间信息 5)检查点信息 6)日志序列号…...
活体成像应用染料CY3.5-NHS星戈瑞
活体成像是一种生物医学研究的重要工具,它能够实时、无创地观察生物体内细胞和分子的动态变化。染料CY3.5-NHS,作为一种常用的活体成像染料,在许多生物医学研究中发挥着关键作用。本文将详细介绍染料CY3.5-NHS的特点、应用以及优势࿰…...
【优选算法】专题1 -- 双指针 -- 复写0
前言: 补充一下前文没有写到的双指针入门知识:专题1 -- 双指针 -- 移动零 目录 基础入门知识: 1. 复写零(easy) 1. 题⽬链接:1089.复习0 - 力扣(LeetCode) 2. 题⽬描述ÿ…...
GESP Python编程三级认证真题 2024年3月
Python 三级 2024 年 03 月 1 单选题(每题 2 分,共 30 分) 第 1 题 小杨的父母最近刚刚给他买了一块华为手表,他说手表上跑的是鸿蒙,这个鸿蒙是?( ) A. 小程序 B. 计时器 C. 操作系统…...
前端理论总结(css3)——link/import区别 // 伪类/伪元素
伪类/伪元素 1: 伪类使用1个冒号,常见的有::hover,:link,:active,:target,:not(),:focus等 伪元素使用 2 个冒号,常见的有:::before&…...
ntp服务器搭建
1、手动修改时区 CST可以为如下4个不同的时区的缩写: 美国中部时间:Central Standard Time (USA) UT-6:00 澳大利亚中部时间:Central Standard Time (Australia) UT+9:30 中国标准时间:China Standard Time UT+8:00 古巴标准时间:Cuba Standard Time UT-4:00小结: UTC:…...
对象的内存布局
在Java虚拟机(HotSpot)中,对象在 Java 内存中的 存储布局 可分为三块: 对象头 存储区域实例数据 存储区域对齐填充 存储区域 对象头区域: 存储对象自身的运行时数据,如:哈希码、GC分代年龄、锁状…...
docker centos7离线安装ElasticSearch单机版
目录 1.下载ES并解压2.新建elasticsearch用户3.修改ES配置文件4.启动ES服务5.设置开机启动 本文以 elasticsearch-7.8.1为例。 1.下载ES并解压 cd /root/install wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.1-linux-x86_64.tar.gz tar -z…...
【计算机网络】IP 协议
网络层IP协议 一、认识 IP 地址二、IP 协议报头格式三、网段划分1. 初识子网划分2. 理解子网划分3. 子网掩码4. 特殊的 IP 地址5. IP 地址的数量限制6. 私有 IP 地址和公网 IP 地址7. 理解全球网络(1)理解公网(2)理解私网…...
刷题DAY38 | LeetCode 509-斐波那契数 70-爬楼梯 746-使用最小花费爬楼梯
509 斐波那契数(easy) 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) 0,F(1) 1 F(n) F(n - 1)…...
蓝桥杯-卡片换位
solution 有一个测试点没有空格,要特别处理,否则会有一个测试点运行错误! 还有输入数据的规模在变,小心顺手敲错了边界条件 #include<iostream> #include<string> #include<queue> #include<map> #incl…...
Unity 布局控制器Content Size Fitter
Content Size Fitter是Unity中的一种布局控制器组件,用于根据其内容的大小来调整包含它的UI元素的大小。换句话来说就是,Content Size Fitter可以根据UI元素内部内容的大小,自动调整UI元素的大小,以确保内容能够正确显示。 如下图…...
网站策划设计招聘/专业海外网站推广
作者:朱金灿 来源:https://blog.csdn.net/clever101 将一个Windows程序从32位转为64位程序,出现用户回调期间遇到未经处理的异常的错误,如下图: 经过调试发现是调用GetWindowLong返回为空指针,经过搜索&am…...
什么是网站源码/深圳龙岗区优化防控措施
结构体初阶一、结构体类型的声明1、什么是结构?2、结构的声明3.结构成员的类型:二、结构体变量的初始化三、结构体成员访问四、结构体传参case1:传值访问case2:传址访问一、结构体类型的声明 1、什么是结构? 数组是一…...
台州网站设计 解放路/推广方案怎么做
工厂模式功能说明您是否需要一种非常快速的方法来制作Factory对象? 然后,您需要lambda或其他函数传递! 它不仅快速,而且非常简单。 我敢打赌,如果您对Lambdas非常满意,那么您只需阅读标题就可以做到这一点。…...
wordpress ak action/河南纯手工seo
目标检测—SSP net网络 ssp net网络其实是在RCNN网络的基础之上做的一些变动,目的是为了解决RCNN其中包含的一些问题,在了解SSP net之前,先需要了解一下两个知识点:感受野和金字塔池化~~ SSP net感受野 上图中,由map…...
资源站建站技术/搜狗收录批量查询
看错误是类没有找到,但是代码中确实有这个类,编译没错,执行的时候报这个异常。 我同事的机器没事,我的有问题。 想了一下差别,就是.classPath文件不一致。 后来进 project - properties-java build path - Order and E…...
上海网站建设维护/seo是什么服
Flutter基础—你好,Flutter! Flutter基础—开发环境与入门 Flutter基础—第一个Flutter实例 Flutter基础—质感设计 Flutter基础—手势处理 Flutter基础—应用实例 Flutter基础—根据用户输入改变控件 Flutter基础—常用控件之容器 Flutter基础—…...