一个执行计划是操作数据库执行运行SQL语句的顺序。
6.1.1执行计划的内容
单独的执行计划操作无法区分调整良好的语句和执行效果欠佳的语句。
该计划包括一系列步骤。每个步骤要么从数据库中物理检索数据行,要么为发出该语句的用户做好准备。以下计划显示employees和departments表的联接:
SQL_ID g9xaqjktdhbcd, child number 0
-------------------------------------
SELECT employee_id, last_name, first_name, department_name from
employees e, departments d WHERE e.department_id = d.department_id and
last_name like 'T%' ORDER BY last_name
Plan hash value: 1219589317
--------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | | | 5 (100)| |
| 1 | NESTED LOOPS | | 5 | 190 | 5 (0)| 00:00:01 |
| 2 | TABLE ACCESS BY INDEX ROWID| EMPLOYEES | 5 | 110 | 2 (0)| 00:00:01 |
|* 3 | INDEX RANGE SCAN | EMP_NAME_IX | 5 | | 1 (0)| 00:00:01 |
|* 4 | TABLE ACCESS FULL | DEPARTMENTS | 1 | 16 | 1 (0)| 00:00:01 |
--------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
3 - access("LAST_NAME" LIKE 'T%')
filter("LAST_NAME" LIKE 'T%')
4 - filter("E"."DEPARTMENT_ID"="D"."DEPARTMENT_ID")
该行源代码树是执行计划的核心。树显示以下信息:
- 语句引用的表 的连接顺序
在前面的计划中,
employees是外部行源,departments是内部行源。 - 语句中提到的每个表 的访问路径
在前面的计划中,优化器选择
employees使用索引扫描和departments完整扫描进行访问。 - 语句中受联接操作影响的表 的联接方法
在前面的计划中,优化器选择一个嵌套循环联接。
- 数据操作,例如过滤,排序或聚合
在前面的计划中,优化器过滤以开头并
T与匹配的姓department_id。
除了行源树之外,计划表还包含有关以下内容的信息:
- 优化,例如每次操作的成本和基数
- 分区,例如访问的分区集
- 并行执行,例如联接输入的分配方法
6.1.2为什么执行计划会更改
执行计划可以而且确实会随着基础优化器输入的更改而更改。
注意:
为避免执行计划更改可能导致SQL性能下降,请考虑使用SQL计划管理。
也可以看看:
- “ SQL计划管理概述 ”
- Oracle Database PL / SQL软件包和类型参考以了解该
DBMS_SPM软件包
6.1.2.1不同的架构
模式可能由于各种原因而有所不同。
主要原因如下:
- 执行和解释计划发生在不同的数据库上。
- 解释该语句的用户与运行该语句的用户不同。两个用户可能指向同一个数据库中的不同对象,从而导致不同的执行计划。
- 两种操作之间的架构更改(通常是索引更改)。
6.1.2.2不同的成本
即使架构相同,当成本不同时,优化器也可以选择不同的执行计划。
影响成本的一些因素包括:
- 数据量和统计
- 绑定变量类型和值
- 全局或在会话级别设置的初始化参数
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




