ToB企服应用市场:ToB评测及商务社交产业平台

标题: Oracle查看实行计划 [打印本页]

作者: 写过一篇    时间: 2024-8-28 15:29
标题: Oracle查看实行计划
目录
一、什么是实行计划?
二、实行计划的目标
三、获取实行计划信息
四、实行计划的实行次序
五、实行计划的存储区
六、实行计划的实行步骤
七、实行计划中各字段的形貌
八、查看实行计划语法
九、实例说明
十、PLSQL Developer中的F5


一、什么是实行计划?

实行计划是由Oracle数据库系统生成的,它形貌了SQL语句的实行方式,包括SQL语句的实行次序、使用的索引、表之间的毗连方式等等。实行计划可以通过多种方式获取,如使用EXPLAIN PLAN语句、使用SQL Trace功能、使用SQL Developer等工具
二、实行计划的目标

查看 Oracle 的实行计划的目标是为了相识 SQL 查询或语句在数据库中的实行方式和性能体现。实行计划是一个详细的指南,它形貌了 Oracle 数据库是怎样实行查询的,包括使用哪些索引、毗连次序、使用何种算法等等。
通过查看实行计划,可以识别出潜伏的性能问题或优化时机。实行计划提供了查询优化器在决定怎样实行查询时所做的选择的信息,可以资助开辟人员或数据库管理员相识查询的成本和效率,并根据需要进行调整和优化。
实行计划可以揭示查询中存在的性能瓶颈、慢查询或未充分利用索引的环境。它还可以资助开辟人员明白查询的实行次序,以及可能引起性能降落的地方。通过分析实行计划,可以确定是否需要调整查询、添加索引、重写查询逻辑或优化数据库布局,以提高查询性能和响应时间。
   总结为以下几点:
  
  三、获取实行计划信息

查询 Oracle 的实行计划可以提供以下信息:
3.1访问路径(Access Path)
实行计划显示了查询怎样访问表或索引,包括全表扫描、索引扫描、索引范围扫描等。这可以资助确定命据是怎样被检索的。
3.2毗连次序(Join Order)
如果查询涉及多个表的毗连操作,实行计划将显示毗连的次序。这对于优化查询的性能很重要,因为差异的毗连次序可能会导致差异的性能。
3.3毗连类型(Join Type)
实行计划指示了毗连操作使用的毗连类型,如内毗连、外毗连或半毗连。这对于相识查询中差异毗连操作的性能影响很有资助。
3.4过滤条件(Filter Predicates)
实行计划会显示应用在表或索引访问上的过滤条件。这可以资助确认查询中的过滤逻辑是否被正确地应用。
3.5排序操作(Sort Operations)
如果查询涉及排序操作,实行计划将显示排序的方式和排序所使用的算法。这对于优化排序操作的性能很有资助。
3.6聚合操作(Aggregation Operations)
如果查询包罗聚合函数(如 SUM、AVG、COUNT 等),实行计划将显示聚合操作的方式和实行方法。
3.7数据库统计信息(Statistics)
实行计划可以提供表、索引或列的统计信息,如行数、唯一值数量等。这对于优化查询计划选择和索引设计很重要。
通过分析实行计划,可以确定查询中的性能瓶颈和优化时机,相识查询的实行方式,以及根据需要进行调整和优化的方法。
四、实行计划的实行次序

Oracle实行计划的实行次序是从上往下,从右往左。也就是说,实行计划的最底部是最后实行的操作,而最顶部是最先实行的操作。左边的操作优先级低于右边的操作,也就是说,右边的操作先实行,左边的操作后实行。
   口诀:
    五、实行计划的存储区

主要包括以下几个部分:

实行计划中的每个操作符都有对应的存储区,用于存储该操作符的实行效果。实行计划中的每个操作符都有自己的任务和目标,它们通过组合形成完备的SQL语句实行计划,终极实现对数据的查询和操作。
六、实行计划的实行步骤


七、实行计划中各字段的形貌

7.1、根本字段(总是可用的)

7.2、查询优化器评估信息

    换句话说,父操作的开销包罗子操作的开销

7.3、分区(仅当访问分区表时下列字段可见)

7.4、并行和分布式处理(仅当使用并行或分布式操作时下列字段可见)

7.5、运行时统计(当设定参数statistics_level为all或使用gather_plan_statistics提示时,下列字段可见)

7.6、I/O 统计(当设定参数statistics_level为all或使用gather_plan_statistics提示时,下列字段可见)

7.7、内存使用统计

   备注:本小节内容参考CSDN博主「Leshami」的原创文章,原文链接:
  https://blog.csdn.net/leshami/article/details/6860007
  八、查看实行计划语法

在Oracle数据库中,可以通过使用“EXPLAIN PLAN”命令来查看查询语句的实行计划。下面是详细的使用方法及实例说明:
8.1. 根本语法
  1. EXPLAIN PLAN FOR SELECT * FROM table_name WHERE condition;
复制代码
8.2. 查看实行计划
  1. SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
复制代码
九、实例说明

假设我们有一个表“employees”,包罗员工的根本信息,我们要查询薪水大于5000的员工信息。我们可以使用以下命令来查看查询语句的实行计划:
  1. EXPLAIN PLAN FOR
  2. SELECT * FROM employees
  3. WHERE salary > 5000;
复制代码
实行上述命令后,可以通过以下命令来查看实行计划:
  1. SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
复制代码
查询效果中会显示查询语句的实行计划,包括每个操作的类型、所涉及的表或索引、所需的成本等信息。比方,查询效果可能如下所示:

   备注(不消上滑了,纳多费劲呀,我懂你累!!):
  
  解释:
  Full Table Scan 和 Index Scan 都是一种查询表数据的方式。
  Full Table Scan 是一种全表扫描的方法,即当我们的查询条件不能使用索引进行查找时,Oracle就会对整个包罗了表数据的数据块进行扫描,从而获取需要的数据。
  Index Scan(也被称为Index Range Scan)则利用了表上的索引,查询时只扫描符合指定范围条件的索引布局,从而快速定位到匹配的纪录。如果查询条件可以使用索引,则选择Index Scan 可以大大提高查询性能。
  总结:Full Table Scan 通常发生在没有使用索引或索引不能完全匹配查询条件的环境下,数据查询速度相对较慢;Index Scan 则利用索引有序性,可快速定位满足查询条件的数据行,而且查询速度更快。
  分析以上效果:
①ID为0的操作为SELECT STATEMENT,表示整个查询语句的实行计划
②ID为1的操作为TABLE ACCESS FULL,表示对表“employees”进行全表扫描
③Predicate Information (identified by operation id) 表示操作所用到的谓词信息,此中 operation id 表示当前操作的 ID 号,谓词信息包括过滤条件、毗连条件等
Predicate Information 中的谓词信息对于明白 SQL 查询的实行计划非常重要。它告诉我们查询优化器是怎样使用索引、过滤条件等对数据进行筛选和毗连的。通过分析 Predicate Information,可以发现 SQL 查询中的性能瓶颈,从而进行优化。
   比方:
    ④1 - filter("SALARY">5000) 表示当前操作是对表进行过滤操作,过滤条件为 "SALARY">5000,即薪资大于 5000 的纪录。
这个操作通常出如今 SELECT 语句中,用于筛选符合条件的纪录。在实行计划中,这个操作通常出如今表扫描、索引扫描等操作之后,用于进一步筛选数据。
   在实行计划中,filter 操作的代价通常比较小,因为它只是对已经扫描的纪录进行进一步筛选,而不需要进行额外的磁盘 IO 操作。但是,如果 filter 操作出如今操作树的顶部,代价可能会比较大,因为它需要读取整个表或索引,并将不符合条件的纪录过滤掉。
  在 SQL 查询的优化过程中,通常要只管镌汰 filter 操作的出现,可以通过添加索引、修改查询条件等方式来避免 filter 操作的出现。
  我们可以通过这些信息来相识查询语句的实行计划及其效率,从而进行优化。
十、PLSQL Developer中的F5

仍旧是查询表“employees”薪水大于5000的员工信息,我们可以使用快捷键F5来查看查询语句的实行计划,如下图所示:




通过切换差异的展示格式,我们可以看到各种信息,但是展示效果与使用explain plan for语句是一样的,这种方式可以更加的快捷方便!
上面的例子相对来说展示效果比较单一,接下来举用下面的例子再形貌以下,已知员工表employees和部分表departments,现要求查询出员工薪资为6000的员工信息和部分信息,我们可以用快捷键F5查看下他的实行计划:

①在上途中我们发现TABLE ACCESS FULL 时,通常意味着该查询使用了 Full Table Scan 的方式来访问表。上面有提到了这个方式,但我还是要再絮聒一下:
Full Table Scan 是一种全表扫描的方法,即当我们的查询条件不能使用索引进行查找时,Oracle就会对整个包罗了表数据的数据块进行扫描,从而获取需要的数据。此时, Oracle 就会选择使用 TABLE ACCESS FULL 操作符。
如果查询中使用了 TABLE ACCESS FULL 而没有使用索引,则可能导致查询速度相对较慢,对于较大的表来说,这种方法可能会产生很高的 I/O 成本和 CPU 成本,不利于系统性能
   留意:
  在实际应用中,尽可能避免使用 Full Table Scan,可以思量使用符合的索引或优化查询语句等方式提高查询性能。
  ②在实行计划中,还发现了INDEX UNIQUE SCAN ,它表示对于一个唯一索引或主键索引的范围查找方式。
当查询语句中包罗了对唯一索引或主键索引字段的等值(=)条件时,在实行计划中就会显示 Index Unique Scan 操作。这种方法可以非常快速地定位到需要查询的行,而且不会产生重复数据输出。
与平凡索引扫描差异的是,Index Unique Scan 确保查询效果最多只有一行纪录,因为唯一索引或主键索引本身就定义了数据行的唯一性。因此,如果我们可以通过索引的方式找到精确匹配的数据,则最好使用 INDEX UNIQUE SCAN 以提高查询效率。
总之,Index Unique Scan 是一种高效的查询方式,实用于对于唯一索引或主键索引进行查询的场景。同时,建立符合的索引也是提高查询性能的重要本领之一。
③在实行计划中,还发现了TABLE ACCESS BY INDEX ROWID ,它表示通过索引行 ID 进行表数据访问的操作。一样平常而言,使用该操作符需要颠末以下步骤:

这个操作符与其他操作符最大的区别在于,它不是针对索引进行数据访问,而是针对实际的数据表进行访问。因此,TABLE ACCESS BY INDEX ROWID 可以通过索引快速定位到需要的数据行,并根据 Rowid 直接访问表数据,从而提高查询的效率。
   留意:
  在使用 TABLE ACCESS BY INDEX ROWID 时,如果表的数据分散在多个磁盘块中,就可能会产生很高的 I/O 成本和 CPU 成本,导致查询性能降落。因此,在进行优化时,应只管避免物理磁盘 IO 操作的数量,可以通过内存或者调整磁盘布局等方式来改善性能。
  ④在本文章的第四节【四、实行计划的实行次序】提到了实行次序,那么我们在上图的树布局--泯灭就可以知道他们的实行次序是怎样排序的,如果不清楚,我们九可以点击图中标记的三角提示进行查看。

通过HTML框图我们可以清楚知道索引扫描的索引名字,全表扫描的表名,分别扫描了多少行,预估多少个字节,CPU的消耗和操作实行消耗的时间等信息。

文本图的展示与explain plan for语句实行效果大致一样,不再过多形貌。

上面也有展示了此图,各人肯定很好奇它是干什么的,哈哈哈!!!不急,下面给你简单形貌一下环境!
在 Oracle SQL Developer 中,使用快捷键 F5 可以查看 SQL 语句的实行计划。这个操作会打开一个新窗口,展示查询 SQL 的实行计划图表与一些统计信息。
如果我们在实行计划窗口中选择了“Explain Plan(XML Format)”,那么窗口下方将会展示该查询语句的 XML 实行计划,此中包括了多个实行计划步骤及其相应的输入、输出参数和所涉及的对象等信息
Oracle 数据库管理系统使用 XML 格式来表示实行计划,这种格式的优点是可读性好易于在差异平台之间进行传输和共享通过查看 XML 实行计划,我们可以更深入地相识查询的实行细节,资助我们分析和优化查询性能问题
   又又又是肝-脑-图-弟的一个晚上,花费了两天时间认真学习和总结了一下Oracle实行计划的查询和查看,毕竟被同事问到你竟然不懂实行计划的时间,确实很尴尬啊!那不得好勤学习总结一下吗?当然也希望这篇文章可以带给各人一点资助啦!
  实行计划其实也不深奥,但是此中有很多知识我还没有整理,当然是因为我还没有学到了,后续会跟进整理一篇关于【导出SQL语句的实行计划】的文章吧!不外这篇的梳理根本足够我们一样平常工作的根本使用,拿去口试被get也没问题啦!多谢各位老铁的查看和支持111!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4