当前位置: 首页 > news >正文

oracle执行计划

Oracle 执行计划(Execution Plan)是优化器(Optimizer)生成的用于执行 SQL 语句的详细步骤描述。通过分析执行计划,可以理解 SQL 语句如何访问数据、使用索引、执行连接操作等,从而优化查询性能。

一、获取执行计划

1. 使用 EXPLAIN PLAN 命令

EXPLAIN PLAN FOR
SELECT * FROM employees WHERE department_id = 10;

-- 查看生成的执行计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

2. 使用 AUTOTRACE 

SET AUTOTRACE TRACEONLY EXPLAIN;
SELECT * FROM employees WHERE department_id = 10; 

3. 从动态性能视图中获取实际执行计划 

-- 查找 SQL 的 SQL_ID
SELECT sql_id, sql_text FROM v$sql WHERE sql_text LIKE '%SELECT * FROM employees%';

-- 使用 DBMS_XPLAN 显示实际执行计划
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('sql_id', null, 'ALLSTATS LAST'));

 

4. 使用 SQL Developer 或 Toad 等工具 

二、执行计划核心要素 

1. 访问路径(Access Path)

  • 全表扫描(TABLE ACCESS FULL):逐行扫描整张表,适用于小表或缺乏有效索引。

  • 索引扫描(INDEX SCAN)

    • INDEX UNIQUE SCAN:唯一索引精确查找。

    • INDEX RANGE SCAN:索引范围扫描。

    • INDEX FULL SCAN:按索引顺序扫描全部条目。

    • INDEX FAST FULL SCAN:多块读取索引(类似全表扫描)。

         

2. 连接方式(Join Method)

  • 嵌套循环连接(NESTED LOOPS):适合小数据集驱动大表,通过索引快速定位。

  • 哈希连接(HASH JOIN):适合大数据集等值连接,需内存构建哈希表。

  • 排序合并连接(MERGE JOIN):需预先对两个数据集排序。

3. 执行顺序 

  • 执行计划按 树形结构 展示,从叶子节点(数据源)向根节点(最终结果)执行。

  • 缩进越深 的步骤越先执行。

4. 关键指标 

  • Cost:优化器估算的相对资源消耗(CPU、I/O),值越小越好。

  • Rows:优化器预估返回的行数(与实际差异可能导致性能问题)。

  • Time:预估执行时间(Oracle 12c+ 支持)。

 三、示例执行计划解读

-----------------------------------------------------------------------------------------
| Id  | Operation                   | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |            |    10 |   690 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMPLOYEES  |    10 |   690 |     3   (0)| 00:00:01 |
|*  2 |   INDEX RANGE SCAN          | DEPT_IDX   |    10 |       |     1   (0)| 00:00:01 |
----------------------------------------------------------------------------------------- 

  • 步骤解读

    1. Id=2:使用索引 DEPT_IDX 进行范围扫描(INDEX RANGE SCAN),预估返回 10 行。

    2. Id=1:通过 ROWID 回表获取完整数据行(TABLE ACCESS BY INDEX ROWID)。

    3. Id=0:返回最终结果。

 

四、常见优化场景 

1. 全表扫描效率低

  • 优化方法:创建合适索引,确保统计信息准确。

2. 索引未被使用

  • 可能原因:隐式类型转换、函数导致索引失效,如 WHERE UPPER(name) = 'JOHN'

3. 连接方式不合理

  • 强制连接方式:使用提示(Hints),如 /*+ USE_HASH(employees departments) */

4. 统计信息过时

 更新统计信息

EXEC DBMS_STATS.GATHER_TABLE_STATS('HR', 'EMPLOYEES'); 

 

五、高级工具 

SQL Monitor(Oracle 11g+):实时监控长时间运行的 SQL。 

 SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(sql_id => 'abc123') FROM dual;

  • AWR/ASH 报告:分析历史 SQL 性能。

 

http://www.dtcms.com/a/102418.html

相关文章:

  • 《异常检测——从经典算法到深度学习》30. 在线服务系统中重复故障的可操作和可解释的故障定位
  • 42. 接雨水
  • Flutter敏感词过滤实战:基于AC自动机的高效解决方案
  • 二分查找:原理、循环不变量与边界处理
  • 设置网站主题色color-scheme
  • 【Easylive】HttpServletRequest、HttpServletResponse、HttpSession 介绍
  • Leetcode hot 100刷题之路(day 1)
  • 黑盒测试的场景法(能对项目业务进行设计测试点)
  • ngx_monotonic_time
  • Git Fetch 和 Git Pull 的区别
  • 双层板模组天线设计指南,50欧姆阻抗匹配设计
  • B-tree 索引失效 避坑指南
  • x265不同preset级别控制的编码参数与编码性能影响
  • BFS(广度优先搜索)
  • 使用DeepSeek API进行情感分析:超简单
  • c语言怎么处理字符串,与c++的区别
  • CentOS下安装Docker,Docker下安装JDK\MYSQL\REDIS\NGINX
  • 压测数据说话:如何用科学方法选择最优高防套餐?
  • 大数据技术之Scala:特性、应用与生态系统
  • MySQL - 索引原理与优化:深入解析B+Tree与高效查询策略
  • ‌粉笔屑里的星辰大海‌----灌南县第四中学九3班汤洁老师
  • harmony OS NEXT- HTTP 模块笔记
  • 【设计模式】享元模式
  • Transformer习题
  • 我开发了一款生成合成数据集的工具
  • 《C++ 函数相关技术解析》
  • 【Paper Tips】随记5-期刊投稿阶段说明
  • 低代码开发平台:企业数字化转型的加速器
  • Linux wifi 驱动移植适配流程详解
  • Java中如何保证高并发的数据安全