解释计划 与 执行计划的 区别

随着可以得到解释计划输出的开发工具, 比如 toad 的普遍使用, 生成解释计划就变的相当简单. 而不简单的是得到执行计划.

解释计划

EXPLAIN PLAN 用来显示优化器为SQL语句所选择的执行计划. 你需要了解一件事, 当你得到了解释计划输出的时候, 你其实是得到了当SQL语句执行的时候应该采用的预期执行计划. 你并没有得到实际的执行计划以及与其相关的数据源执行统计信息. 你所得到的只是估计值, 而不是实际值. 在下面, 我将通过将估计的信息成为解释计划输出而把实际信息成为执行计划输出来区分实际的和预期的执行计划.

解释计划输出最令人沮丧的地方就是它与实际执行时所使用的计划可能是不一致的. 使用解释计划的时候有以下3点可能导致计划输出与实际执行计划不一致的地方.

  • 解释计划是基于你使用它的时候的环境来生成的
  • 解释计划不考虑绑定变量的数据类型(所有的绑定变量都是 varchar2的)
  • 解释计划不”窥视”绑定变量的值.

解释计划不考虑绑定变量的数据类型并假设所有的绑定变量都是字符串类型的方式. 然而, 当语句真正执行的时候所准备的执行计划却要考虑数据类型. 需要牢记的一个预期行为: 谓语(where语句中的那些条件)必须严格匹配索引定义, 否则不会使用索引.

阅读计划

按照执行计划的顺序显示

select id, parent_id, operation

from (

select level lvl, id, parment_id, lpad(‘’, level) || operation || ‘’ ||options || ‘’ || object_name as operation

from plan_table

start with id = 0

connect by prior_id = parent_id

)

order by lvl desc, id;

解释计划输出中最有用的部分之一就是被称为谓语信息的部分, 在这个部分中, 将会示出 ACCESS_PREDICATES 和 FILTER_PREDICATES 列, 这两列与计划运算列表中的一行(用ID列来指示)相关, 你会发现计划中每一个有相关的访问或筛选谓语的运算, 在其ID的旁边都有一个星号(*), 当你看到星号的时候, 你就知道要在谓语信息部分寻找ID号来确定哪个谓语(where子句中的条件) 是与该运算相关的. 通过使用这些信息你就可以确认用来进行索引访问的列是正确(或不正确)的, 并且可以确定在哪里进行了条件过滤.

较晚的进行过滤时常见的性能抑制剂.

执行计划

当一条SQL语句执行的时候将会生成该语句的实际执行计划. 在语句被硬解析之后, 所选的执行计划就会被存到库告诉缓存中以便以后使用. 可以通过查询 v$SQL_PLAN来查看计划运算.

查询最近生成的SQL语句: V$SQL

查看相关执行计划

有好几种方法可以用来查看任何值钱已经执行过的SQL语句保存在库高速缓存中的执行计划.

1. 利用 dbms_xplan.display_cursor 函数

select /*+ gather_plan_statistics */ empno, ename from scott.emp where ename = ‘KING’;

set serveroutput off

select * from table(dbms_xplan.display_cursor(null, null, ‘ALLSTATS LAST’));

06 SQL执行计划的更多相关文章

  1. Oracle查看SQL执行计划的方式

    Oracle查看SQL执行计划的方式     获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式:   基本有以下几种方式: ...

  2. Atitit sql执行计划

    Atitit sql执行计划 1.1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的 Oracle中的执行计划 ...

  3. 查看SQL执行计划

    一用户进入某界面慢得要死,查看SQL执行计划如下(具体SQL语句就不完全公布了,截断的如下): call     count       cpu    elapsed       disk       ...

  4. 查看Oracle SQL执行计划的常用方式

    在查看SQL执行计划的时候有很多方式 我常用的方式有三种 SQL> explain plan for 2 select * from scott.emp where ename='KING'; ...

  5. sql执行计划解析案例(二)

    sql执行计划解析案例(二)   今天是2013-10-09,本来以前自己在专注oracle sga中buffer cache 以及shared pool知识点的研究.但是在研究cache buffe ...

  6. Oracle之SQL优化专题01-查看SQL执行计划的方法

    在我2014年总结的"SQL Tuning 基础概述"中,其实已经介绍了一些查看SQL执行计划的方法,但是不够系统和全面,所以本次SQL优化专题,就首先要系统的介绍一下查看SQL执 ...

  7. Oracle中SQL调优(SQL TUNING)之最权威获取SQL执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

  8. DB查询分析器7.01新增的周、月SQL执行计划功能

                DB查询分析器7.01新增的周.月SQL执行计划功能 马根峰              (广东联合电子服务股份有限公司, 广州 510300) 1      引言   中国本土 ...

  9. SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积

    SQL优化 MySQL版 -分析explain SQL执行计划 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 首先我们先创建一个数据库,数据库中分别写三张表来存储数据; course: ...

随机推荐

  1. 分布式拒绝服务攻击(DDoS)原理及防范

    DDoS攻击概念 DoS的攻击方式有很多种,最基本的DoS攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应. DDoS攻击手段是在传统的DoS攻击基础之上产生的一类攻击 ...

  2. RadioGroup+Fragment 使用Fragment的add()方法,防止使用replace每次都重新加载页面,造成资源浪费

    radiogroup+fragment是很常用的主页导航控件,之前为了代码简便一直使用的replace()替换fragment,代码如下: getSupportFragmentManager().be ...

  3. 使用System.arraycopy()实现数组之间的复制

    System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制. 其函数原型是: public static void arraycopy(Object src, int s ...

  4. python 购物车和三级菜单

    程序:购物车程序 需求: 启动程序后,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额 ...

  5. rtc关机闹钟3 IAlarmManager

    vim framework/base/core/java/android/app/IAlarmManager.aidl import android.app.AlarmManager;import a ...

  6. HttpClient的使用方法

    使用httpClient发送请求.接收响应很简单.一般需要以下几个步骤. 第一:创建HttpClient对象: 第二:创建请求方法的实例,并指定请求URL.如果要发送GET请求,创建HttpGet对象 ...

  7. c# 之五行地支

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  8. Unity-Animator深入系列---StateMachineBehaviour状态机脚本学习

    回到 Animator深入系列总目录 首先这个脚本必须继承自StateMachineBehaviour public class MySMB : StateMachineBehaviour { pub ...

  9. java web简单权限管理设计

    一套最基本的权限管理包括用户.角色.资源. 数据库设计 我的设计如下: 用户:user 角色:role 用户-角色:user_role 资源:resource(包括上级菜单.子菜单.按钮等资源) 角色 ...

  10. nyoj CO-PRIME 莫比乌斯反演

    CO-PRIME 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 This problem is so easy! Can you solve it? You are ...