这里,我学到的一个很重要的东西,就是用PL/SQL DEVELOPER去看一条SELECT语句的执行计划,执行计划里面可以看到这条SELECT语句的开销、I/O操作开销等数值,可以很清晰地看到语句各个部分的执行效率。选中这条SELECT语句以后,按F5就可以。

以下面的SELECT语句为例子:

从三张表中取数据,按我以前的想法,只要WHERE语句那里有能让三张表连接起来的条件就可以。所以我只使用了:

按F5后,可以看到这样做的执行计划如下:

开销974,其实并不算高。但是加上测试环境的数据库连接速度确实很慢,导致了经常会出现数据库连接超时的提示。

修改后的SELECT语句如下:

      可以看到,修改只是在WHERE里面多加了两个关联条件。此时再按F5看执行计划:
 
  这时候COST只剩下95了。实际操作中,确实也明显感到了操作速度的提升。

执行计划的执行顺序是,从内层至外层,从上往下。比如上面修改后的实行计划中,数据库先对ORDER_HEADER的主键做了一个索引范围检索,然后再对XXWMS_DLX_SERIAL_NUMBER的非唯一性索引XXWMS_DLX_SERIAL_NUMBER_N4做索引范围检索。

在做修改之前,SERIAL_NUMBER表和XXWMS_DLX_SERIAL_NUMBER表使用了循环嵌套(NESTED LOOPS)的连接方法,得到结果后再与ORDER_HEADER进行哈希连接。由于两个表的数据量都比较大(SERIAL_NUMBER在测试环境中数据量达到一千四百万条左右),循环嵌套连接的步骤显然开销了很多。

可以猜想,如果循环嵌套连接中其中一个表的数据量小一点,就可以减少很多开销。于是,在连接条件中多加一条xx.client_id = oh.client_id。这样就使用了ORDER_HEADER的主键去和XXWMS_DLX_SERIAL_NUMBER的N4索引进行连接,得到结果以后再去和SERIAL_NUMBER连接。结果在上图可以看到,COST只有95,大大加快了执行的效率。

这个经历让我觉得PL/SQL的优化相当神奇,效果是一样的,但只是加一个条件就可以使得执行效率有如此大的提高。就这个改变,使得弹出来的超时提醒的几率大大降低,对于用户来说这个改变是很重要的。

 其它查看方法:

需要先创建plan_table
create table PLAN_TABLE (
        statement_id         varchar2(30),
        timestamp            date,
        remarks              varchar2(80),
        operation            varchar2(30),
        options               varchar2(255),
        object_node          varchar2(128),
        object_owner         varchar2(30),
        object_name          varchar2(30),
        object_instance numeric,
        object_type     varchar2(30),
        optimizer       varchar2(255),
        search_columns  number,
        id                numeric,
        parent_id        numeric,
        position        numeric,
        cost                numeric,
        cardinality        numeric,
        bytes                numeric,
        other_tag       varchar2(255),
        partition_start varchar2(255),
        partition_stop  varchar2(255),
        partition_id    numeric,
        other                long,
        distribution    varchar2(30),
        cpu_cost        numeric,
        io_cost                numeric,
        temp_space        numeric);

建表的sql在rdbms/admin下有,名字是utlxplan.sql
我用的是9i,其他版本的名字可能不一样,
然后执行
explain plan for sql语句
然后可以执行这个sql看结果
SELECT LPAD (' ', 2 * LEVEL) ||
       operation ||
       ' ' ||
       options ||
       ' ' ||
       object_name query_plan
  FROM plan_table
CONNECT BY PRIOR id = parent_id
START WITH id = 1
ORDER BY id;

PL/SQL DEVELOPER执行计划的查看的更多相关文章

  1. PL/SQL Developer执行.sql文件的几种方法

    1.复制SQL 第一种方法非常常见,也非常简单,先用文本编辑器打开.sql文件,然后把sql复制到PL/SQL Developer的SQL窗口或者命令窗口中运行就行了,本来我也是这么做的,但是我将SQ ...

  2. pl/sql developer执行光标所在行

    一.发现问题 需要执行某一行语句时,需要选中该行语句,点击F8才行. 二.解决问题 中文版:工具->首选项->SQL窗口->自动选择语句 英文版:tools->preferen ...

  3. PL/SQL Developer连接到Oracle 12c

    安装32位的Oracle客户端instantclient-basic-nt-12.1.0.1.0.zip 下载地址:http://www.oracle.com/technetwork/topics/w ...

  4. PL/SQL Developer 查看查询的执行计划

    https://zhuanlan.zhihu.com/p/65771352 通过 PL/SQL Developer 查看查询的执行计划 1 什么是执行计划 执行计划是一条查询语句在 Oracle 中的 ...

  5. db2数据库创建索引,删除索引,查看表索引,SQL语句执行计划以及优化建议

    1.建立表索引 create index 索引名 on 表名(列名,列名); 2.删除表索引 drop index 索引名 on 表名; 3.查看表索引 select * from sysibm.sy ...

  6. KingbaseES 如何查看应用执行的SQL的执行计划

    通过explain ,我们可以获取特定SQL 的执行计划.但对于同一条SQL,不同的变量.不同的系统负荷,其执行计划可能不同.我们要如何取得SQL执行时间点的执行计划?KingbaseES 提供了 a ...

  7. PL/SQL Developer使用技巧、快捷键

    1.类SQL PLUS窗口:File->New->Command Window,这个类似于oracle的客户端工具sql plus,但比它好用多了. 2.设置关键字自动大写:Tools-& ...

  8. PL SQL Developer 使用总结

    如果OS为windows 7 64位系统,Oracle版本为 Oracle 11g 64 安装PL SQL Developer 请参考    http://myskynet.blog.51cto.co ...

  9. PL/SQL Developer使用技巧

    1.PL/SQL Developer记住登陆密码 在使用PL/SQL Developer时,为了工作方便希望PL/SQL Developer记住登录Oracle的用户名和密码: 设置方法:PL/SQL ...

随机推荐

  1. 转 Tesseract-OCR 字符识别---样本训练

    转自:http://blog.csdn.net/feihu521a/article/details/8433077 Tesseract是一个开源的OCR(Optical Character Recog ...

  2. Cookie安全与CSRF和XSS攻击知识点收集

    个人简单理解: 1.XSS最简单的理解就是可以在表单提交的内容上嵌入JS执行代码,然后页面渲染的时候没有过滤时会自动执行这个脚本. 2.CSRF可以理解为当你登录了京东,浏览器上保存了你登录的Cook ...

  3. js中多行字符串拼接

    前言 我们会经常遇到这样的场景,需要拼接多行字符串,在字符串中动态插入一些数据以达到业务的需求.但是js中并没有标准的多行编辑的函数,于是聪明的程序员们便脑洞大开,书写出许多有趣的方法. 1 2 3 ...

  4. Concurrency and Application Design (一)

    在计算机发展的早期,单位工作时间的最高限额是一台计算机可以执行通过CPU的时钟速度确定.但是,随着技术的进步和处理器设计变得更紧凑,热等物理约束开始限制处理器的最高时钟速度.因此,芯片制造商寻找其它的 ...

  5. Android重写view时onAttachedToWindow () 和 onDetachedFromWindow ()

    在重写View的时候,会遇到这两个方法 protected void onAttachedToWindow() Description copied from class: View This is ...

  6. mysql 安装配置及经常使用操作

    作为关系型数据库的一种,mysql因其占用内存小和开源等特性而兴起.以下简介下关于mysql配置和简单的操作. mysql配置 1.安装文件的下载 免安装版下载地址 :http://dev.mysql ...

  7. python(24)- 面向对象进阶

    面向对象基础知识: 1.面向对象是一种编程方式,此编程方式的实现是基于对类和对象的使用: 2.类是一个模板,模板中包装了多个‘函数’供使用(可以将多函数中公用的变量封装到对象中): 3.对象,根据模板 ...

  8. python(37)- 软件开发规范

    软件开发规范 一.为什么要设计好目录结构? 1.可读性高: 不熟悉这个项目的代码的人,一眼就能看懂目录结构,知道程序启动脚本是哪个,测试目录在哪儿,配置文件在哪儿等等.从而非常快速的了解这个项目. 2 ...

  9. DateTime操作,时间范围,加减

    DB里边存的是char类型数组的时间,例如20151111 12171220000,现在需要把这个时间加减5s,组成 一个时间范围 然后再写存储过程. 想到的办法就是把这个时间先转换成DateTime ...

  10. website link

    error: template with C linkage http://blog.csdn.net/jiong_1988/article/details/7915420http://velep.c ...