EXPLAIN PLAN FOR:在Oracle中生成执行计划

目录

案例

解析

Operation类型


在Oracle中,可以使用 EXPLAIN PLAN FOR 命令来生成执行计划,然后通过

SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'))来查看执行计划。需要注意的是,这两个命令需要在同一个窗口下运行,否则会报错。

案例

解析

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

当你使用Oracle的EXPLAIN PLAN命令来查看查询的执行计划时,你通常会看到这样的输出。下面是一个简化的解释,帮助你理解每一列的含义:

Id: 这是操作的唯一标识符。它通常用于区分执行计划中的不同步骤。

Operation: 这描述了数据库为了执行查询所采取的具体操作。例如,TABLE ACCESS表示对表的访问,INDEX RANGE SCAN表示对索引的范围扫描,NESTED LOOPS表示嵌套循环连接等。

Name: 这通常显示被访问的表或索引的名称。对于某些操作,如过滤或连接,这一列可能为空。

Rows: 这是数据库估计的该操作将返回的行数。这个数字对于理解查询的性能和效率很重要,因为它可以帮助你识别可能的瓶颈。

Bytes: 这表示该操作预计返回的数据量(以字节为单位)。这可以帮助你估算查询的内存使用和网络传输成本。

Cost (%CPU): 这是Oracle优化器估计的该操作的相对成本。它考虑了各种因素,如磁盘I/O、CPU使用等。百分比CPU表示该操作在CPU上的相对使用率。

Time: 这表示Oracle估计的完成该操作所需的时间(以毫秒为单位)。这可以帮助你了解查询的哪个部分最耗时。

Operation类型

在Oracle的执行计划中,Operation 列表示数据库为了执行查询或DML(如INSERT、UPDATE、DELETE)操作而采取的特定步骤。以下是Operation列中可能出现的一些常见类型及其简要描述:

  1. SELECT STATEMENT: 表示这是一个SELECT查询操作。
  2. TABLE ACCESS: 描述了对表的访问方式。
    1. TABLE ACCESS FULL: 表示进行了全表扫描,即读取了表中的所有行。
    2. TABLE ACCESS BY INDEX ROWID: 表示数据库首先通过索引定位到行ID(ROWID),然后使用这些ID来从表中获取数据。
    3. TABLE ACCESS BY LOCAL INDEX: 类似于上一种,但指的是局部索引。
  3. INDEX ACCESS: 描述了对索引的访问方式。
    1. INDEX RANGE SCAN: 表示对索引的范围扫描,通常用于在索引上应用范围条件。
    2. INDEX FULL SCAN: 表示对索引的完整扫描,类似于全表扫描但针对索引。
    3. INDEX UNIQUE SCAN: 表示对唯一索引的扫描,通常用于查找单个值。
  4. NESTED LOOPS: 表示嵌套循环连接操作,通常用于连接两个或多个表。
  5. HASH JOIN: 表示哈希连接操作,它是另一种连接两个或多个表的方法。
  6. MERGE JOIN: 表示合并连接操作,它基于排序的输入执行连接。
  7. SORT: 表示排序操作,可能是为了执行连接、分组或排序查询结果。
  8. FILTER: 表示过滤操作,用于减少从前面步骤传递过来的行数。
  9. AGGREGATE: 表示聚合操作,如SUM、AVG、COUNT等。
  10. GROUP BY: 表示分组操作,通常与聚合函数一起使用。
  11. COUNT STOPKEY: 在并行查询中,用于停止计数操作的键。
  12. TABLE MAP: 在并行查询中,用于映射表或索引段到不同的并行服务器进程。
  13. PX COORDINATOR: 表示并行查询协调器操作。
  14. PX SEND/PX RECEIVE: 在并行查询中,用于发送和接收数据块。
相关推荐
读心悦1 小时前
修改 MySQL 数据库中的唯一键
数据库·mysql
qq_213157891 小时前
(c#)unity中sqlite多线程同时开启事务会导致非常慢
数据库·sqlite·c#
北极无雪1 小时前
Spring源码学习(拓展篇):SpringMVC中的异常处理
java·开发语言·数据库·学习·spring·servlet
666xiaoniuzi2 小时前
深入理解 C 语言中的内存操作函数:memcpy、memmove、memset 和 memcmp
android·c语言·数据库
正在走向自律2 小时前
3.使用条件语句编写存储过程(3/10)
数据库·存储过程·安全架构
YONG823_API2 小时前
电商平台数据批量获取自动抓取的实现方法分享(API)
java·大数据·开发语言·数据库·爬虫·网络爬虫
小小不董2 小时前
图文深入理解Oracle DB Scheduler
linux·运维·服务器·数据库·oracle
大拇指的约定3 小时前
数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(三),单表查询
数据库·mysql·oracle
阳光阿盖尔3 小时前
redis——哨兵机制
数据库·redis·缓存·主从复制·哨兵
小小娥子3 小时前
【Redis】Hash类型的常用命令
数据库·spring boot·redis