0

0

Oracle SQL:了解执行计划和性能调优

betcha

betcha

发布时间:2024-07-17 15:54:41

|

1212人浏览过

|

来源于DZone

原创

解释计划是犹如烹饪的艺术,旨在优化数据库查询。数据库系统根据自身的运行方式“解释”SQL查询,执行计划展现了这一过程。通过审阅这些计划,我们能够了解优化器的选择,并通过修改来提升数据检索速度。

Oracle SQL:了解执行计划和性能调优

查询优化类似于制作完美食谱的艺术——它需要深入了解原料(数据)、厨房(数据库系统)和使用的技术(查询优化器)。每个数据库系统都有自己的处理和运行 SQL 查询的方式,“解释”计划向我们展示了这一切是如何运作的。通过查看这些计划,我们可以了解优化器做出的选择,并做出改进以加快数据检索速度。

在Oracle数据库中,优化器以其稳健性和复杂性而闻名,通常被描述为基于成本和基于规则的策略的组合。

在本文中,我们将探讨每个数据库如何生成和利用“解释”计划,并强调其方法的优势和潜在缺陷。无论您是数据库开发人员、数据库管理员还是数据分析师,了解这些机制都将使您能够有效地优化查询,确保更快、更可靠的数据检索。

解释计划在查询优化中的重要性

解释计划对于使选择查询更快、更高效非常有用。从中获取见解和解释也有助于优化查询速度和资源使用率。 

这就是为什么它们如此重要:

  • 性能洞察: 解释计划显示查询运行的路径。这告诉我们哪些部分真的很慢以及哪些部分需要改进。
  • 成本分析:解释计划中的每个操作都有相应的成本;此成本是一个估算值,它用作查询执行的各种方式之间的相对指标。查询成本越低,查询性能越快。
  • 索引利用率: 解释计划告诉我们索引是否正在使用以及如何使用。正确使用索引可能会使查询的处理非常快。
  • 连接策略:解释计划显示如何跨表连接涉及多个表的查询。了解这一点有助于优化表之间的关系。
  • 故障排除:当查询速度慢时,解释计划对于了解原因非常重要。事实上,它们可以准确地显示问题所在,使修复变得更容易。
  • 优化技术:在解释计划中,我们学习不同的查询优化技术,这些技术有时需要重写、数据库结构更改甚至配置更改。

定义和目的

基本上,执行计划是数据库引擎如何执行查询的分步说明。它概述了操作顺序、将要使用的索引以及连接表的方法。由于生成解释计划可能是一个资源密集型过程,因此了解其重要性至关重要。

解释计划的主要目的是让您深入了解查询的性能。通过分析解释计划,您可以了解数据库在哪些地方可以高效运行,或者在哪些地方可能遇到性能瓶颈。这种了解让您能够识别和解决潜在问题,从而帮助优化查询以获得更好的性能。

关键概念和术语

  • 执行计划(访问路径):数据库执行查询所遵循的路径。 
  • 成本:执行查询所需资源(如 CPU 和 I/O)的估计值。 
  • 操作: 特定的数据库操作,例如从表中读取或执行索引扫描。
  • 行数:每个操作将处理的预计行数。
  • 过滤器:行必须满足的条件才能进入查询处理的下一步。 
  • 连接方法:使用的连接类型,例如嵌套循环或哈希连接。
  • 字节:提供执行计划中每个操作将处理的数据量(以字节为单位)的估计值。
  • 例如图: 查询的解释计划输出示例:DB - Oracle:工具 - PLSQL Developer

解释计划

总之,降低查询成本通常意味着执行时间更快,因为资源消耗减少,查询处理更高效。同样,更高的选择性可以提高索引的使用效率并减少处理的行数,从而提高查询性能。 

在 Oracle 中生成解释计划

使用EXPLAIN PLAN

Oracle 中的语句EXPLAIN PLAN为查询创建执行计划。

EXPLAIN PLAN FOR SELECT * FROM雇员;

这将创建一个可以查询的计划,用于DBMS_XPLAN.DISPLAY提供完整的视图。

使用DBMS_XPLAN.DISPLAY

上述查询创建了一个可以查询的解释计划,用于DBMS_XPLAN.DISPLAY提供完整的视图。 

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

欢迎页面

使用 Oracle SQL Developer 工具

您还可以使用快捷方式使用 SQL Developer 生成解释计划 - 按 F10。

使用 Oracle SQL Developer 工具

实例

我们来看一下客户订单查询。

设想

由于缺少索引和连接方法不够理想,连接订单和客户两个表的查询运行缓慢。我们将通过添加索引和重写连接来优化查询。

识别慢查询

SELECT o.order_id, c.full_name

FROM orders o JOIN customers c

ima.copilot
ima.copilot

腾讯大混元模型推出的智能工作台产品,提供知识库管理、AI问答、智能写作等功能

下载

ON o.customer_id = c.customer_id

WHERE o.order_status = 'COMPLETE';

逐步解读计划

让我们从查询的解释计划开始。

问题

该查询执行全表扫描并使用哈希连接,导致性能缓慢。

问题

解决方案

当您在查询中发现全表扫描时,请考虑将其替换为索引扫描。首先,检查是否已存在必要的索引;如果不存在,请在WHERE子句、JOIN条件和ORDER BY子句中使用的列上创建新的索引。

让我们首先尝试在连接条件(即连接和 where 子句的一部分的列)上创建索引。 

CREATE INDEX customers_idx0 ON customers (customer_id, full_name);

CREATE INDEX orders_idx1 ON orders (customer_id, order_id, order_status);

创建索引后收集表统计信息对于数据库优化器在查询执行计划上做出明智的决策至关重要。让我们收集表统计信息。

EXEC DBMS_STATS.gather_table_stats(SYS, 'CUSTOMERS');

EXEC DBMS_STATS.gather_table_stats(SYS, ORDERS);

现在我们重新检查一下添加这些索引后的执行计划。

添加索引

成本从 8 降低到 6,这意味着通过使用索引快速全扫描和范围扫描替换全表扫描,成本提高了 25%。

通用优化策略

索引

创建索引通常会使查询运行得更快,因为这样可以避免数据扫描。正确的索引将使许多查询只需查找正确的行即可运行。

查询重写

有时,可以通过重写查询来提高查询性能,从而使其更加有效。通常,可以重写涉及复杂连接或有时子查询的查询,以获得更高效的执行计划。

执行计划缓存

然后它会缓存该计划以供重新执行,从而避免每次创建执行计划的开销。特别是,这允许许多查询使用以前计算的计划。

最佳实践

索引策略

  • 识别并创建索引: 识别运行缓慢的查询。创建适当的索引以加快数据检索速度。对于基于多列进行过滤的查询,请考虑使用复合索引来提高性能。
  • 避免过度索引:过多的索引会降低性能,尤其是 DML。定期检查并删除未使用或多余的索引。

查询设计

  • 简化查询:  尽可能将复杂的查询分解为更简单的部分。使用子查询和临时表来管理中间结果。
  • 避免SELECT *: 在语句中明确指定所需的列,SELECT以减少数据检索负载。
  • 适当使用连接: 选择INNER JOINs 来匹配行,并且OUTER JOIN仅在必要时使用 s。确保连接条件基于索引列。

执行计划分析

  • 定期检查执行计划:使用EXPLAIN命令(或等效工具)分析和理解查询执行计划。识别瓶颈和低效率。
  • 查找全表扫描: 通过添加索引或重组查询来识别并优化导致全表扫描的查询。
  • 监控成本和基数:关注执行计划中的预估成本和基数,以确保高效的查询路径。

 明智地使用查询提示

  • 指导优化器: 当您对数据和工作负载模式有更好的了解时,使用查询提示来影响优化器的选择。定期测试和验证提示对查询性能的影响,因为如果数据或工作负载发生变化,它们可能会导致次优计划。

结论

理解和利用解释计划对于优化数据库查询非常重要。通过掌握本文介绍的技巧和技术,数据库开发人员和管理员都可以大大提高查询性能。这反过来会提高数据库的整体效率,从而缩短响应时间并提高数据库管理效率。通过关注解释计划,您可以轻松识别和解决潜在的性能瓶颈,确保您的数据库以最佳状态运行。

例如,假设数据库开发人员/管理员在处理某些关键报告时遇到性能问题。他们可以轻松识别执行计划中成本高昂的全表扫描,并将其替换为索引搜索。结果,查询执行时间从几个小时缩短到几分钟。这不仅提高了系统的响应能力,还释放了资源用于其他任务,展示了利用执行计划的实际好处。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

674

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

319

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

345

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1084

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

355

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

671

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

566

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

408

2024.04.29

桌面文件位置介绍
桌面文件位置介绍

本专题整合了桌面文件相关教程,阅读专题下面的文章了解更多内容。

0

2025.12.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.2万人学习

Java 教程
Java 教程

共578课时 | 39.3万人学习

oracle知识库
oracle知识库

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号