`
lumingming1987
  • 浏览: 116337 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

(转载)使用plsql执行计划进行sql调优

 
阅读更多

一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在。 


那么,作为开发人员,怎么样比较简单的利用执行计划评估SQL语句的性能呢?总结如下步骤供大家参考: 


1、打开熟悉的查看工具:PL/SQL Developer。 

  在PL/SQL Developer中写好一段SQL代码后,按F5,PL/SQL Developer会自动打开执行计划窗口,显示该SQL的执行计划。 


2、查看总COST,获得资源耗费的总体印象 

  一般而言,执行计划第一行所对应的COST(即成本耗费)值,反应了运行这段SQL的总体估计成本,单看这个总成本没有实际意义,但可以拿它与相同逻辑不同执行计划的SQL的总体COST进行比较,通常COST低的执行计划要好一些。


3、按照从左至右,从上至下的方法,了解执行计划的执行步骤 

执行计划按照层次逐步缩进,从左至右看,缩进最多的那一步,最先执行,如果缩进量相同,则按照从上而下的方法判断执行顺序,可粗略认为上面的步骤优先执行。每一个执行步骤都有对应的COST,可从单步COST的高低,以及单步的估计结果集(对应ROWS/基数),来分析表的访问方式,连接顺序以及连接方式是否合理。 


4、分析表的访问方式 

  表的访问方式主要是两种:全表扫描(TABLE ACCESS FULL)和索引扫描(INDEX SCAN),如果表上存在选择性很好的索引,却走了全表扫描,而且是大表的全表扫描,就说明表的访问方式可能存在问题;若大表上没有合适的索引而走了全表扫描,就需要分析能否建立索引,或者是否能选择更合适的表连接方式和连接顺序以提高效率。


5、分析表的连接方式和连接顺序 

  表的连接顺序:就是以哪张表作为驱动表来连接其他表的先后访问顺序。 

表的连接方式:简单来讲,就是两个表获得满足条件的数据时的连接过程。主要有三种表连接方式,嵌套循环(NESTED LOOPS)、哈希连接(HASH JOIN)和排序-合并连接(SORT MERGE JOIN)。我们常见得是嵌套循环和哈希连接。 

嵌套循环:最适用也是最简单的连接方式。类似于用两层循环处理两个游标,外层游标称作驱动表,Oracle检索驱动表的数据,一条一条的代入内层游标,查找满足WHERE条件的所有数据,因此内层游标表中可用索引的选择性越好,嵌套循环连接的性能就越高。 

哈希连接:先将驱动表的数据按照条件字段以散列的方式放入内存,然后在内存中匹配满足条件的行。哈希连接需要有合适的内存,而且必须在CBO优化模式下,连接两表的WHERE条件有等号的情况下才可以使用。哈希连接在表的数据量较大,表中没有合适的索引可用时比嵌套循环的效率要高。 


6、请核心技术组协助分析  www.2cto.com   

以上步骤可以协助我们初步分析SQL性能问题,如果遇到连接表太多,执行计划过于复杂,可联系核心技术组共同讨论,一起寻找更合适的SQL写法或更恰当的索引建立方法 

 

总结两点: 

1、这里看到的执行计划,只是SQL运行前可能的执行方式,实际运行时可能因为软硬件环境的不同,而有所改变,而且cost高的执行计划,不一定在实际运行起来,速度就一定差,我们平时需要结合执行计划,和实际测试的运行时间,来确定一个执行计划的好坏。 

2、对于表的连接顺序,多数情况下使用的是嵌套循环,尤其是在索引可用性好的情况下,使用嵌套循环式最好的,但当ORACLE发现需要访问的数据表较大,索引的成本较高或者没有合适的索引可用时,会考虑使用哈希连接,以提高效率。排序合并连接的性能最差,但在存在排序需求,或者存在非等值连接无法使用哈希连接的情况下,排序合并的效率,也可能比哈希连接或嵌套循环要好。 

分享到:
评论

相关推荐

    使用plsql查看执行计划

    在PL/SQL中查看执行计划,可以使用`EXPLAIN PLAN`语句或直接在开发工具如PL/SQL Developer中运行SQL并查看其执行计划。例如,假设我们有一个未对`Input_time`字段建立索引的表`tb_merp_schedul_log`,并执行了一个...

    高性能SQL调优

    1. **SQL优化基础**:SQL查询是数据库操作的核心,理解SQL的工作原理,如解析、执行计划生成、索引使用等,是调优的基础。了解SQL的执行过程,包括查询语句的解析、优化和执行三个阶段,有助于找出性能瓶颈。 2. **...

    plsql如何执行.sql文件?

    本文将详细介绍如何使用 PL/SQL Developer 工具来执行 .sql 文件。 #### 1. 登录到数据库 首先,启动 PL/SQL Developer 软件,并通过以下步骤连接到数据库: 1. **打开 PL/SQL Developer**:双击桌面上的 PL/SQL ...

    PLSQL快速执行批量的SQL文件

    当你在文件夹里有很多很多很多的SQL文件需要执行时候,一个一个复制路径文件名出来执行肯定很慢很烦。 而且你不关心他们的执行顺序的时候,这时我们可以简单的利用Dos把文件夹里所有SQL文件的路径与文件名统一导成一...

    oracle的sql调优宝典

    - **性能调优**:通过分析和优化SQL语句或程序代码来提高它们在数据库上的执行效率。 ##### 声明变量与类型选择 - **变量声明**:正确地声明变量可以显著提高程序的执行效率。例如,使用`DECLARE n NUMBER;`声明一...

    pl sql批量执行多个sql文件和存储过程

    对于Oracle数据库而言,PL/SQL是一种非常强大的工具,它不仅可以用于编写复杂的数据库应用程序,还能够方便地进行SQL脚本的批量执行以及存储过程的调用。本文将详细介绍如何使用PL/SQL Developer来实现这一功能。 #...

    PLSQL隔断时间再执行sql的时候卡死未响应(要等很久才有结果)解决办法

    - 检查SQL语句的执行计划,确保使用了最优路径。 - 合理建立索引,提高数据检索速度。 - 避免使用过度嵌套的子查询,尝试转换为JOIN操作。 2. **调整网络配置**: - 检查客户端到数据库服务器的网络状况,确保...

    PLSQL程序性能分析及优化

    实施过程中,经常会使用 PL/SQL Developer 工具进行数据转换和处理业务数据。通过性能 优化来提高程序执行效率是必须掌握的一份技能。性能问题中绝大部分都是由于程序编写的 不合理、不规范造成的。本文档阐述了程序...

    PLSQL.rar_SQLServer pls_plsql_plsql sqlserver

    执行部分是实际执行的代码,包括SQL语句和PLSQL语句;异常处理部分用于捕获和处理运行时可能出现的错误。 1. **变量和常量**: 在PLSQL中,可以声明变量和常量来存储数据。变量可以在程序中改变其值,而常量一旦被...

    在64位机器上使用plSQL连接Oracle的问题(SQLNet not properly installed)

    1. **plSQL Developer**: 这是一款由PL/SQL Developments公司开发的强大的Oracle数据库管理工具,主要用于编写、调试和执行PL/SQL代码,以及管理数据库对象。 2. **64位环境**: 在64位操作系统上,plSQL Developer...

    plsql+sqlDbx数据库连接工具

    7. **性能分析**:通过执行计划、查询优化等功能,帮助用户评估SQL语句的性能并提供改进建议。 总的来说,plsql和sqlDbx作为专业的数据库连接工具,它们提供了丰富的功能和良好的用户体验,无论是在日常开发还是在...

    PLSQL.rar_oracle_pl sql_plsql_plsql java_sql

    标题中的“PLSQL.rar_oracle_pl sql_plsql_plsql_java_sql”暗示了这是一个关于Oracle数据库中PLSQL使用的资源包,可能包含了PLSQL的教程、示例代码和与Java集成的相关信息。Oracle数据库是世界上最广泛使用的数据库...

    去除plsql复制的sql语句的多余空格和换行符

    在plsql把一个sql语句美化后要复制到程序里使用时,就会发现有多余的空格和换行符,此程序将美化后的sql语句还原成1行sql语句

    不安装oracle使用plsql

    标题中的“不安装oracle使用plsql”意味着要在没有Oracle数据库客户端的情况下使用PL/SQL Developer这一工具。这通常通过Oracle的Instant Client实现,该组件提供了一种轻量级的解决方案,允许用户连接到Oracle...

    plsql sql语句自动补全

    plsql中 sql 语句自动补全 如 只输入s 即可自动补全为 select * from 使用方法 下载该文件 并在plsql中 选择 tools-perferences-edit-autoreplaces 点击浏览 选择该文件

    plsql创建存储过程并创建job定时任务执行-详细笔记文档总结

    在本文中,我们将详细介绍如何使用 plsql 创建存储过程并创建 job 定时任务执行。 一、创建存储过程 在 Oracle 中,存储过程是指一组 SQL 语句的集合,用于执行特定的操作。创建存储过程需要使用 create procedure...

    PLsql_exam.sql

    PLsql_exam.sql

Global site tag (gtag.js) - Google Analytics