SQL优化 - 执行计划基础

执行计划是什么?

执行计划是Oracle数据库用于执行语句的步骤组合。
每个步骤从数据库物理的检索数据或者为发出语句的用户准备数据行。
执行计划包括每个表的访问路径,以及连接表(连接顺序)的适当的连接方式

如何获取执行计划?

explain plan for

  • 实际执行SQL语句;
  • 未必是真实的执行计划;
  • 使用dbms_xplan显示;

sqlplus autotrace

  • 实际执行SQL语句(set autotrace traceonly explain除外);
  • 未必是真实的执行计划;

sql trace

  • 启用10046或sql trace;
  • 使用 tkprof 格式化;

V$SQL V$SQL_PLAN

  • 可以查询到多个子游标的计划信息;
  • 易用性差;

DBMS_XPLAN.DISPLAY_CURSOR

  • SQL执行后才能得到;
  • 真实的执行计划;
  • 需要通过 alter session set statistics_level=all 或加入 /*+ gather_plan_statistics */ hint 并在使用DBMS_XPLAN.DISPLAY_CURSOR时加入 format=>‘allstats last’ 才能得到 A-rows等实际值;

SQL Monitor

  • 准确显示各个步骤实际执行效果;
  • 真实的执行计划;
  • 执行超过5秒或使用并行会自动保存,否则需要加 monitor 的 hint;
  • 推荐使用

第三方工具

  • 未必是真实的执行计划;

DBMS_XPLAN的使用:select * from table(dbms_xplan.***);
这里给出了DBMS_XPLAN包中的五种方法的用途及数据源,具体使用及参数详见官方文档:
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/arpls/DBMS_XPLAN.html

方法使用数据源
DISPLAYexplain planplan_table
DISPLAY_CURSORreal planshare pool 中的游标缓存
DISPLAY_AWRhistoryAWR 仓库基表 WRH$_SQL_PLAN
DISPLAY_SQLSETSQL Tuning SetSQL Set 视图
DISPLAY_SQL_PLAN_BASELINESQLPLAN BaselineSQL 执行计划基准库

如何阅读执行计划?

执行计划的月度顺序

  • 先子后父,先上后下
  • 由上至下,从右向左

标量子查询例外,它在主SELECT的后面执行,却显示在上面。

两种说法,意思是一样的。关键是要多看、多思考、多练习、多总结。
示例:
执行计划示例1
执行顺序:3 - 4 - 2 - 1 - 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值