一、ORACLE中常见执行计划
表访问的执行计划
1、table access full:全表扫描。它会访问表中的每一条记录。
2、table access by user rowid:输入源rowid来自于用户指定。
3、table access by index rowid:输入源rowid来自于索引。
4、table access by global index rowid:全局索引获取rowid,然后再回表。
5、table access by local index rowid:分区索引获取rowid,然后再回表。
6、table access cluster:通过索引簇的键来访问索表。
7、external table access:访问外部表。
8、result cache:结果集可能来自于缓存。
9、mat_view rewrite access:物化视图。
索引访问的执行计划
1、index unique scan:只返回一条rowid的索引扫描,或者unique索引的等值扫描。
2、index range scan:返回多条rowid的索引扫描。
3、index full scan:顺序扫描整个索引。
4、index fast full scan:多块读方式扫描整个索引。
5、index skip scan:多应用于组合索引中,引导键值为空的情况下索引扫描。
6、and-equal:合并来自于一个或多个索引的结果集。
7、domain index:应用域索引。
表连接的执行计划
表连接的几种方式:
1、SORT MERGE JOIN(排序-合并连接)
2、NESTED LOOPS(嵌套循环)
3、HASH JOIN(哈希连接)
4、CARTESIAN PRODUCT(笛卡尔积)
二、怎样查看Oracle执行计划
1、plsql Developer中查看
在plsql中:工具 —> 首选项 —> 窗口类型 —> 计划窗口 —> 根据需要配置要显示在执行计划中的列
执行计划的常用列字段解释:
基数(Rows):Oracle估计的当前操作的返回结果集行数
字节(Bytes):执行该步骤后返回的字节数
耗费(COST)、CPU耗费:Oracle估计的该步骤的执行成本,用于说明SQL执行的代价,理论上越小越好(该值可能与实际有出入)
时间(Time):Oracle估计的当前操作所需的时间
在SQL窗口执行完一条select语句后按 F5 即可查看刚刚执行的这条查询语句的执行计划
2、sql命令查看
(1)explain plan命令
例子:explain plan for select * from zyfs.contact_order where rowid = ‘AAAU1wADyAAAAFLAAA‘;
select * from table(dbms_xplan.display);
(2)sqlplus的autotrace开关
autotrace开关可以在sqlplus下得到目标sql的执行计划,也可以同时得到目标sql的统计信息。autotrace开关的具体语法如下:
set autotrace {off|on|traceonly} [explain] [statistics]
具体使用方法如下:
(1)set autotrace on:显示目标sql的执行结果,执行计划和统计信息。
(2)set autotrace off:只显示目标sql的执行结果,为默认值。
(3)set autotrace traceonly:显示执行结果数量,执行计划和统计信息。
(4)set autotrace traceonly explain:只显示目标sql的执行计划。
(5)set autotrace tranceonly statistics:只显示目标sql的执行结果数量和统计信息。
三、看懂执行计划
执行计划其实是一颗树,层次最深的先执行,层次相同,上面的先执行。显示的时候已经按照层次缩进。
例如:
在plsql工具中有查看顺序的按钮,如上图红色圈子。
原文地址:https://www.cnblogs.com/jnba/p/10677657.html