PLSQL执行计划
1. 什么是执行计划
对一个查询任务,做出一份怎样完成任务的详细方案。Sql是一种傻瓜式语言,每一个条件就是一个需求,访问的顺序不同就形成了不同的执行计划,Oracle必须做出选择,一次只能有一种访问路径,一个访问路径就是一个执行计划
2. 怎么查看执行计划
在sql窗口执行完一条SQL后按F5即可查看这条sql的执行计划

3. 配置执行计划窗口
plsql中选择: 工具–> 首选项 –> 窗口类型 –> 计划窗口
根据需要选择在执行计划窗口要显示的列

4. 常用列字段解释
Description:下面的内容分别是整条SQL的执行步骤,缩进最多的最先执行,缩进量相同,则按照从上往下的顺序执行。
对象所有者(Object owner)
对象名称(Object name)
耗费(COST)\CPU耗费:
Oracle估计的该步骤执行的成本,用于说明SQL执行的代价,理论上越小越好
基数(Rows): Oracle估计的当前操作返回的结果集行数
字节(Bytes): 执行该步骤后返回的字节数
时间(Time): Oracle估计当前操作需要的时间
5. Description动作的说明
TABLE ACCESS FULL: 全表扫描
Oracle会读取表中所有的行,并检查每一行是否满足SQL语句中的where条件
TABLE ACCESS BY ROWID: 通过ROWID的表存区
Rowid:
Oracle数据库的表中每一行数据都有一个唯一的标识符,或者称为ROWID,在Oracle内部通常就是使用它来访问数据的.ROWID需要10个字节的存储空间,并用18个字符来显示,该值表明了该行在Oracle数据库中物理具体位置.具体内容请点传送门 {target=”_blank”
rel=”noopener”}TABLE ACCESS BY INDEX SCAN: (索引扫描)
在索引块中,既存储每个索引的键值,也存储具有该键值的行的ROWID
所以索引扫描分为两步:
- 扫描索引得到对应的ROWID
- 通过ROWID定位到具体的行读取数据.
6. 索引扫描
INDEX UNIQUE SCAN: 索引唯一扫描
针对唯一性索引(UNIQUE INDEX)的扫描,每次最多只返回一条记录
INDEX RANGE SCAN: 索引范围扫描
使用一个索引存取多行数据;发生索引范围扫描的三种情况:
- 在唯一索引上使用了范围操作符(如:> < <> >= <= between)
- 在组合索引上,只使用部分列进行查询
- 对非唯一索引列上进行的任何查询
INDE FULL SCAN: 索引全扫描
进行全索引扫描时查出的数据都必须从索引中可以直接得到
INDEX FAST FULL SCAN: 索引快速扫描
与INDEX FULL SCAN相似,但是索引快速扫描不会对查询出的数据进行排序
INDEX SKIP SCAN: 索引跳跃扫描
有时候复合索引的前导列(索引包含的第一列)没有在查询语句中出现,oralce也会使用该复合索引,这时候就使用的INDEX
SKIP SCAN;
7. 表的连接方式(JOIN)
- SORT MERGE JOIN(排序-合并连接)
- NESTED LOOPS(嵌套循环)
- HASH JOIN(哈希连接)
- CARTESIAN PRODUCT(笛卡尔积)
- 标题: PLSQL执行计划
- 作者: zlong.w
- 创建于 : 2023-09-26 14:08:37
- 更新于 : 2023-09-26 15:43:28
- 链接: https://zlonx.cn/2023/09/26/PLSQL执行计划/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。