前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >获取SQL执行计划最基础的方法是啥?

获取SQL执行计划最基础的方法是啥?

作者头像
SQLplusDB
发布于 2020-11-12 02:43:46
发布于 2020-11-12 02:43:46
61100
代码可运行
举报
运行总次数:0
代码可运行

出品丨TeacherWhat

关键字:Oracle、SQL、调优、诊断、手把手数据库入门、Database、Explain

正文约4500字,建议阅读时间6分钟

目录结构:

1. 使用EXPLAIN PLAN命令的准备

2. EXPLAIN PLAN FOR命令的使用方法

3. 查看EXPLAIN PLAN生成的执行计划

4. EXPLAIN PLAN使用例

5. 注意事项

6. 本文要点&思考

本公众号文章仅代表个人观点,与任何公司无关。

其他系列文章:SQL调优和诊断从哪入手?

使用EXPLAIN PLAN命令

获取执行计划最基础的方法是使用EXPLAIN PLAN命令。 通过EXPLAIN PLAN命令,可以不实际执行SQL的前提下,查看某条SQL根据统计信息生成的执行计划。

使用EXPLAIN PLAN命令的准备

要使用EXPLAIN PLAN命令,需要首先创建执行计划表PLAN_TABLE 。 这样通过EXPLAIN PLAN命令生成的执行计划会保存在表PLAN_TABLE 中。

一般情况下,执行计划表PLAN_TABLE是已经默认创建好的,也可以根据需要手动创建。

创建方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--10G之前的版本执行以下脚本
SQL> @@?/rdbms/admin/utlxplan

--10G以后的版本执行以下脚本
SQL> @@?/rdbms/admin/catplan

EXPLAIN PLAN FOR命令的使用方法

EXPLAIN PLAN FOR命令的语法如下:

▲引用自Database SQL Language Reference

例:SQL> explain plan for <SQL语句>

参考:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Database SQL Language Reference
https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/EXPLAIN-PLAN.html#GUID-FD540872-4ED3-4936-96A2-362539931BA0

查看EXPLAIN PLAN生成的执行计划

EXPLAIN PLAN FOR命令执行后,可以通过以下方式查看生成的执行计划。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1 utlxpls.sql脚本
显示一般串行处理的执行计划。
SQL> @@?/rdbms/admin/utlxpls.sql

2 utlxplp.sql脚本
显示并行处理的执行计划。
@@?/rdbms/admin/utlxplp.sql

3 DBMS_XPLAN.DISPLAY3.1
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY());

3.2 
SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE',NULL,'ALL'));

4 通过指定statement_id,直接查询PLAN_TABLE表。

SELECT cardinality "Rows",
lpad(' ',level-1)||operation||' '||options||' '||object_name "Plan"
FROM PLAN_TABLE
CONNECT BY prior id = parent_id
AND prior statement_id = statement_id
START WITH id = 0
AND statement_id = '<指定的statement_id >'
ORDER BY id;

EXPLAIN PLAN使用例

以下时EXPLAIN PLAN的使用例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--执行SQL
SQL> explain plan for
 select * from dual;  2

Explained.

---1.通过utlxpls.sql脚本显示执行计划
SQL> @@?/rdbms/admin/utlxpls.sql

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

8 rows selected.

--2.通过utlxplp.sql脚本显示执行计划
SQL> @@?/rdbms/admin/utlxplp.sql

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

8 rows selected.


--3.1 通过DBMS_XPLAN.DISPLAY()显示执行计划
SQL> SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

8 rows selected.

--3.2 通过DBMS_XPLAN.DISPLAY()显示执行计划
SQL> SELECT PLAN_TABLE_OUTPUT FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE',NULL,'ALL'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 272002086

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |     2 |     2   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
--------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

   1 - SEL$1 / DUAL@SEL$1

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   1 - "DUAL"."DUMMY"[VARCHAR2,1]

18 rows selected.

通过指定的statement_id,直接查询PLAN_TABLE表

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--执行SQL
SQL> explain plan set statement_id = 'test' for
 select * from dual;  2

Explained.

--查询PLAN_TABLE表查看执行计划
SQL> set linesize 200
SQL> col Plan format a80
SQL> SELECT cardinality "Rows",
  2  lpad(' ',level-1)||operation||' '||options||' '||object_name "Plan"
FROM PLAN_TABLE
  3    4  CONNECT BY prior id = parent_id
AND prior statement_id = statement_id
  5    6  START WITH id = 0
  7  AND statement_id = 'test'
ORDER BY id;
  8
      Rows Plan
---------- --------------------------------------------------------------------------------
         1 SELECT STATEMENT
         1  TABLE ACCESS FULL DUAL

注意事项

EXPLAIN PLAN命令能够在不真正执行SQL的前提下获取执行计划,从而在最小的系统影响的前提下,帮助我们进行SQL调优和诊断。 但是,EXPLAIN PLAN命令得到的是根据各种统计信息预估的执行计划,可能和实际执行时的执行计划不同。例如:包含绑定的SQL文 或者 在版本12c上,由于自适应执行计划(Adaptive Execution Plans)的影响等,EXPLAIN PLAN命令并不能反映出实际的执行计划。

其他详细请参考在线文档:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Database SQL Language Reference
https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/EXPLAIN-PLAN.html#GUID-FD540872-4ED3-4936-96A2-362539931BA0

本文要点

本文介绍了Oracle中获取执行计划最基础的方法,EXPLAIN PLAN命令。

思考

除了EXPLAIN PLAN命令,你常用的还有哪些获取执行计划的方法?各种方法的优缺点是什么?

——End——

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Oracle数据库技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Adobe 认证证书怎么考
Adobe系统公司(英语:Adobe Systems Incorporated,是美国一家跨国电脑软件公司)总部位于加州的圣何塞,其官方大中华部门内也常以中文“奥多比”自称。主要从事多媒体制作类软件的开发,近年亦开始涉足丰富的互联网应用程序、市场营销应用程序、金融分析应用程序等软件开发。
IT胶囊
2022/08/29
1K0
Adobe 认证证书怎么考
Adobe国际认证
Adobe Certified Professional 培训认证体系(中文:Adobe国际认证)是Adobe公司CEO签发的权威国际认证体系,面向设计师、学生、教师及企业技能岗位的国际认证及培训体系,旨在为使用Adobe软件的个人和机构提供认可和证明其技能和能力的机会。
IT胶囊
2023/04/04
6810
Adobe国际认证证书有用吗?
Adobe国际认证又称为Adobe认证(英文:Adobe Certified Professional)是Adobe公司CEO签发的权威国际认证体系,旨在为用户提供Adobe软件的专业认证。
IT胶囊
2023/04/21
7750
如何成为一名获得Adobe认证的专业人员?
Adobe Certified Professional* 认证培训体系(中文:Adobe认证专家)是Adobe公司CEO签发的权威国际认证体系,面向设计师、学生、教师及企业技能岗位的国际认证及培训体系,Adobe认证专家基于Αdobe核⼼技术及岗位实际应⽤操作能⼒的测评体系得到国际ISTE协会的认证。
IT胶囊
2022/08/05
3790
如何成为一名获得Adobe认证的专业人员?
adobe认证证书含金量
Adobe国际认证(以下简称:Adobe认证)是Adobe官方推出的认证体系,考试实测技能,行业认可度高。Adobe认证适用范围广泛,通过Adobe认证考试可增加职场机会,也能凭Adobe认证证书得到业界认可。
IT胶囊
2022/08/25
7570
adobe认证证书含金量
Adobe国际认证证书,深化设计师个人优势!
Adobe国际认证又称为Adobe认证(英文:Adobe Certified Professional)是Adobe公司CEO签发的权威国际认证体系,旨在为用户提供Adobe软件的专业认证。
IT胶囊
2023/04/23
3170
Adobe国际认证证书,深化设计师个人优势!
设计师Adobe国际认证证书有用吗?
先说答案:Adobe国际认证证书在设计师行业的用处很大,无论是求职、跳槽,还是升职、加薪。其次,Adobe国际认证证书由 Adobe全球CEO 签发,全球可查。并且Adobe国际认证证书代表了你的实际创作和职业能力,可以说拥有Adobe国际认证证书也是拥有了就业的敲门砖。
IT胶囊
2023/02/27
5490
设计师Adobe国际认证证书有用吗?
Adobe国际认证是什么?怎么报考Adobe认证?(了解这一篇就够了)
开工了!在春节期间有很多小伙伴都来问我,Adobe国际认证是什么?怎么报考Adobe国际认证?对此,今天特意出了这么一篇有关于Adobe国际认证证书的详解篇,希望能够帮助到那些还有犹豫徘徊的优秀设计师
IT胶囊
2023/02/03
7290
Adobe国际认证是什么?怎么报考Adobe认证?(了解这一篇就够了)
Adobe国际认证 Live | 新手Premiere Pro和After Effects先学哪个好?
Adobe公司的Premiere Pro(简称PR)和After Effects(简称AE)是两个非常流行的视频编辑软件,它们都是Adobe Creative Suite的一部分。但是,对于初学者来说,选择哪一个软件来学习可能会有些困难。
IT胶囊
2023/04/14
6890
Adobe国际认证 Live | 新手Premiere Pro和After Effects先学哪个好?
Adobe有哪些软件?
Adobe是一家知名的软件公司,其产品广泛应用于图像处理、视频制作、网页设计等领域。以下是Adobe公司旗下的一些主要软件:
IT胶囊
2023/04/17
1.5K0
Adobe是什么?
对于这个问题相信不少学设计的小伙伴们对于adobe都不陌生,特别是对于从事ui设计、平面设计、影视后期制作等行业的人们,毕竟大家在学习过程中以及工作中使用所的很多软件,都是由adobe开发的。
IT胶囊
2022/08/03
2.6K0
Adobe是什么?
【315全民季】Adobe权威国际认证体系,Adobe国际认证!
Adobe国际认证(基于Αdobe核心技术及岗位实际应⽤操作能力的测评体系)一般指Adobe Certified Professional 培训认证体系(以下简称:Adobe国际认证),是Adobe公司CEO签发的权威国际认证体系。
IT胶囊
2023/03/14
6340
【315全民季】Adobe权威国际认证体系,Adobe国际认证!
adobe认证证书怎么考
随着数字时代的到来,Adobe软件已经成为数字创意领域的主流工具。获得Adobe认证证书对于考生来说,具有很高的价值。
IT胶囊
2023/06/29
2620
adobe认证证书怎么考
Adobe证书含金量
Adobe Certified Professional(中文简称:Adobe国际认证/Adobe认证)培训认证体系,是Adobe公司CEO签发的权威国际认证体系,面向设计师、学生、教师及企业技能岗位的国际认证及培训体系,Adobe Certified Professional(中文简称:Adobe国际认证/Adobe认证)基于Adobe核⼼技术及岗位实际应⽤操作能⼒的测评体系得到国际ISTE协会及ACE的认可。 2017年引进中国以来得到广大的行业及用户认可,被国内达内教育、中公教育、火星时代等众多知名IT培训机构及院校,作为视觉设计、平面设计等专业的培训及技能测评考核的依据及标准。
IT胶囊
2023/02/02
7300
Adobe证书含金量
【Adobe国际认证中文官网】Adobe中国摄影计划,免费安装 正版激活
一直以来国内有非常多的 Adobe 用户,但苦于正版的购买渠道较少、价格较为高昂,转而选择其他国家或地区的 Adobe 计划,亦或者是其他软件。这次Adobe在杭州宣布在中国大陆地区推出面向专业摄影师及摄影爱好者的Adobe Creative Cloud 中国摄影计划。同时,Adobe宣布天猫为Adobe Creative Cloud 中国摄影计划的电商战略合作伙伴,并将与其合作上线Adobe天猫官方旗舰店。
IT胶囊
2023/03/02
2.5K0
创意设计师,请不要相信考证无用论!
朋友向我吐槽:“自己30多岁了,感觉马上步入了中年危机。尤其郁闷的是,今年在公司的内部晋升也失败了。后来发现被提名的是一个刚工作两年的95后小朋友。”
IT胶囊
2023/04/10
4820
如何成为一名获得 Adobe 国际认证的专业设计师?
获得职业生涯中高价值的认证,是一种自信、荣誉的象征,也是一种被行业认可的方式,Adobe 国际认证可验证Creative Cloud软件的应用能力及设计工作等岗位的技能和知识。
IT胶囊
2022/07/27
4030
如何成为一名获得 Adobe 国际认证的专业设计师?
2022就业季!Adobe助力创意产业工作者,突破技能桎梏,回归能力本源
除了自然美景,世间伟大或平凡的事物几乎都是人的观念变革的产物,其中多数是我们在工作过程中群体创意的产物。
IT胶囊
2022/07/25
3230
2022就业季!Adobe助力创意产业工作者,突破技能桎梏,回归能力本源
Adobe创意软件和认证体系,赋能创新、创意型设计人才数字化转型
在数字化时代,数字经济已成为推动全球经济发展的重要力量。随着数字经济的快速发展,数字人才也快速增长。相关研究显示,2013年至2021年,以传统和新兴数字人才培养高校和专业数量为评价指标的数字人才指数由1000增至6440.46,增长了6.44倍。但数字人才的数量远不能满足数字经济发展需要,数字人才缺口巨大,而且伴随数字产业化和产业数字化的快速推进,这一缺口还将继续扩大。数字人才缺口主要表现在数字管理人才、数字基础研究和技术研发人才、数字应用人三类人才。
IT胶囊
2023/02/23
3320
Adobe创意软件和认证体系,赋能创新、创意型设计人才数字化转型
Adobe国际认证设计师证书含金量怎么样?
Adobe国际认证设计师证书是由Adobe全球CEO签发,在全球已发行19种语言版本,通行148个国家,获得国际接纳和认可。这意味着Adobe国际认证证书具有全球范围内的认可和价值。
IT胶囊
2023/04/23
4530
推荐阅读
相关推荐
Adobe 认证证书怎么考
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档