目录
案例
解析
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列中可能出现的一些常见类型及其简要描述:
- SELECT STATEMENT: 表示这是一个SELECT查询操作。
- TABLE ACCESS: 描述了对表的访问方式。
- TABLE ACCESS FULL: 表示进行了全表扫描,即读取了表中的所有行。
- TABLE ACCESS BY INDEX ROWID: 表示数据库首先通过索引定位到行ID(ROWID),然后使用这些ID来从表中获取数据。
- TABLE ACCESS BY LOCAL INDEX: 类似于上一种,但指的是局部索引。
- INDEX ACCESS: 描述了对索引的访问方式。
- INDEX RANGE SCAN: 表示对索引的范围扫描,通常用于在索引上应用范围条件。
- INDEX FULL SCAN: 表示对索引的完整扫描,类似于全表扫描但针对索引。
- INDEX UNIQUE SCAN: 表示对唯一索引的扫描,通常用于查找单个值。
- NESTED LOOPS: 表示嵌套循环连接操作,通常用于连接两个或多个表。
- HASH JOIN: 表示哈希连接操作,它是另一种连接两个或多个表的方法。
- MERGE JOIN: 表示合并连接操作,它基于排序的输入执行连接。
- SORT: 表示排序操作,可能是为了执行连接、分组或排序查询结果。
- FILTER: 表示过滤操作,用于减少从前面步骤传递过来的行数。
- AGGREGATE: 表示聚合操作,如SUM、AVG、COUNT等。
- GROUP BY: 表示分组操作,通常与聚合函数一起使用。
- COUNT STOPKEY: 在并行查询中,用于停止计数操作的键。
- TABLE MAP: 在并行查询中,用于映射表或索引段到不同的并行服务器进程。
- PX COORDINATOR: 表示并行查询协调器操作。
- PX SEND/PX RECEIVE: 在并行查询中,用于发送和接收数据块。