PLSQL执行计划

zlong.w Lv2

1. 什么是执行计划

对一个查询任务,做出一份怎样完成任务的详细方案。Sql是一种傻瓜式语言,每一个条件就是一个需求,访问的顺序不同就形成了不同的执行计划,Oracle必须做出选择,一次只能有一种访问路径,一个访问路径就是一个执行计划

2. 怎么查看执行计划

在sql窗口执行完一条SQL后按F5即可查看这条sql的执行计划

image-20200814161656769

3. 配置执行计划窗口

plsql中选择: 工具–> 首选项 –> 窗口类型 –> 计划窗口

根据需要选择在执行计划窗口要显示的列

image-20200814160948039

4. 常用列字段解释

Description:下面的内容分别是整条SQL的执行步骤,缩进最多的最先执行,缩进量相同,则按照从上往下的顺序执行。

对象所有者(Object owner)

对象名称(Object name)

耗费(COST)\CPU耗费:
Oracle估计的该步骤执行的成本,用于说明SQL执行的代价,理论上越小越好

基数(Rows): Oracle估计的当前操作返回的结果集行数

字节(Bytes): 执行该步骤后返回的字节数

时间(Time): Oracle估计当前操作需要的时间

5. Description动作的说明

  1. TABLE ACCESS FULL: 全表扫描

    Oracle会读取表中所有的行,并检查每一行是否满足SQL语句中的where条件

  2. TABLE ACCESS BY ROWID: 通过ROWID的表存区

    Rowid:
    Oracle数据库的表中每一行数据都有一个唯一的标识符,或者称为ROWID,在Oracle内部通常就是使用它来访问数据的.ROWID需要10个字节的存储空间,并用18个字符来显示,该值表明了该行在Oracle数据库中物理具体位置.具体内容请点传送门 {target=”_blank”
    rel=”noopener”}

  3. TABLE ACCESS BY INDEX SCAN: (索引扫描)

    在索引块中,既存储每个索引的键值,也存储具有该键值的行的ROWID

    所以索引扫描分为两步:

    1. 扫描索引得到对应的ROWID
    2. 通过ROWID定位到具体的行读取数据.

6. 索引扫描

  1. INDEX UNIQUE SCAN: 索引唯一扫描

    针对唯一性索引(UNIQUE INDEX)的扫描,每次最多只返回一条记录

  2. INDEX RANGE SCAN: 索引范围扫描

    使用一个索引存取多行数据;发生索引范围扫描的三种情况:

    1. 在唯一索引上使用了范围操作符(如:> < <> >= <= between)
    2. 在组合索引上,只使用部分列进行查询
    3. 对非唯一索引列上进行的任何查询
  3. INDE FULL SCAN: 索引全扫描

    进行全索引扫描时查出的数据都必须从索引中可以直接得到

  4. INDEX FAST FULL SCAN: 索引快速扫描

    与INDEX FULL SCAN相似,但是索引快速扫描不会对查询出的数据进行排序

  5. INDEX SKIP SCAN: 索引跳跃扫描

    有时候复合索引的前导列(索引包含的第一列)没有在查询语句中出现,oralce也会使用该复合索引,这时候就使用的INDEX
    SKIP SCAN;

7. 表的连接方式(JOIN)

  1. SORT MERGE JOIN(排序-合并连接)
  2. NESTED LOOPS(嵌套循环)
  3. HASH JOIN(哈希连接)
  4. 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 进行许可。