`
dreamoftch
  • 浏览: 495695 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

plsql 执行计划 扫盲

阅读更多


    一段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低的执行计划要好一些。  www.2cto.com  

    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发现需要访问的数据表较大,索引的成本较高或者没有合适的索引可用时,会考虑使用哈希连接,以提高效率。排序合并连接的性能最差,但在存在排序需求,或者存在非等值连接无法使用哈希连接的情况下,排序合并的效率,也可能比哈希连接或嵌套循环要好。

    附I:几种主要表连接的比较


    

    
    
    作者 jadethao
分享到:
评论

相关推荐

    使用plsql查看执行计划

    在Oracle数据库中,执行计划是决定SQL语句如何高效运行的关键步骤。在处理复杂的查询时,优化器(Optimizer)会根据一系列策略选择最优的执行路径。本篇文章将深入探讨如何使用PL/SQL来查看和理解Oracle的执行计划,...

    PLSQL程序性能分析及优化

    PLSQL程序性能分析及优化 经验总结 实施过程中,经常会使用 PL/SQL Developer 工具进行数据转换和处理业务数据。通过性能 优化来提高程序执行效率是必须掌握的一份技能。性能问题中绝大部分都是由于程序编写的 不合理...

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

    plsql创建存储过程并创建job定时任务执行详细笔记文档总结 在 Oracle 中,plsql 是一种强大的编程语言,可以用来创建存储过程和定时任务执行。在本文中,我们将详细介绍如何使用 plsql 创建存储过程并创建 job 定时...

    PLSQL快速执行批量的SQL文件

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

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

    ### PLSQL隔断时间再执行SQL的时候卡死未响应(要等很久才有结果)解决办法 在使用PL/SQL Developer或其他Oracle数据库管理工具时,可能会遇到一个常见的问题:执行SQL语句或存储过程时,系统长时间无响应或者卡住...

    表提示不能执行,PLSQL Developer

    在使用PLSQL Developer工具进行数据库开发的过程中,可能会遇到“表提示不能执行”的问题。这通常是因为用户对某些表或视图没有足够的权限所导致的。本文将详细介绍这一问题及其解决方案。 ### 一、问题背景 #### ...

    PLSQL_Developer8.0绿色版64位

    8. **性能分析**:提供性能分析工具,如执行计划分析,帮助优化SQL语句,提升数据库性能。 9. **脚本执行**:用户可以编写和执行批处理脚本,进行数据库维护或自动化任务。 10. **连接管理**:支持多个数据库连接...

    plsql11汉化包

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL程序。在中文环境下,对于不熟悉英文界面的用户来说,使用英文版可能会带来不便。"plsql11汉化包"正是为了解决这个问题,...

    PLSQL免安装版本下载

    PLSQL Developer是一款强大的Oracle数据库开发工具,主要用于编写、调试、执行和管理PL/SQL代码。在许多情况下,用户可能需要PLSQL的免安装版本,这可能是出于便携性、节省系统资源或者避免系统冲突的考虑。标题...

    plsql资料--plsql资料

    PLSQL中的SQL语句可以直接执行DML(数据操纵语言)操作,如INSERT、UPDATE、DELETE,也可以执行DDL(数据定义语言)来创建或修改数据库对象。 2. **Oracle存储过程**: 存储过程是一组预先编译好的PLSQL语句,可以...

    plsql 32位下载

    2. **调试器**:内置调试器允许设置断点、单步执行、查看变量值,便于定位和解决程序问题。 3. **数据库连接**:可以轻松连接到多个Oracle数据库实例,进行数据查询和管理。 4. **数据浏览**:直观展示表、视图、...

    PLSQL程序优化和性能分析方法.pdf

    性能分析是指对 PLSQL 程序的执行过程进行监控和分析,以确定程序的执行效率和瓶颈所在。以下是 PLSQL 程序优化和性能分析方法的知识点: 1. 前言 PLSQL 程序优化的目的在于提高程序的执行效率和性能,减少资源占用...

    plsql导出Excel、CSV、Txt文件

    使用plsql导出Excel、CSV、Txt文件,使你轻松安照自己的展示形式生成报表

    PLSQL学习资料 PLSQL学习资料 PLSQL学习资料

    PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 PLSQL学习资料 ...

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

    ### PL/SQL批量执行多个SQL文件和存储过程 在日常的数据库管理与开发工作中,经常需要执行大量的SQL脚本或调用多个存储过程。对于Oracle数据库而言,PL/SQL是一种非常强大的工具,它不仅可以用于编写复杂的数据库...

    PLSQL简易教程学过以后plsql不愁

    执行部分是 PLSQL 块中的指令部分,由关键字 BEGIN 开始,所有的可执行语句都放在这一部分,其他的 PLSQL 块也可以放在这一部分。 ### 异常处理部分 (Exception section) 这一部分是可选的,在这一部分中处理异常...

    PLSQL程序优化和性能分析方法

    PLSQL程序优化是指在编写PLSQL程序时,为了提高程序的执行效率和性能所采取的一系列措施和技术。这些措施和技术可以帮助开发者编写高效、可靠、可维护的PLSQL程序,从而提高系统的整体性能和响应速度。 在编写PLSQL...

    通过PLSQL的进行oracle数据库导入导出

    - **Create tables**:用于在导入数据前新建表,适合已创建用户但需导入未执行建表脚本的情况。 - **Truncate tables**:导入前清空表数据,适用于恢复到初始状态,速度较快。 - **Delete tables**:与`Truncate ...

    PlSql中的 CnPlugin 插件

    PL/SQL Developer(简称PLSQL)是一款由Allround Automations公司开发的专业Oracle数据库管理与开发工具,它为数据库管理员和开发人员提供了强大的功能,包括编写、调试、执行SQL和PL/SQL代码等。而CnPlugin是针对...

Global site tag (gtag.js) - Google Analytics