06 SQL执行计划
解释计划 与 执行计划的 区别
随着可以得到解释计划输出的开发工具, 比如 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执行计划的更多相关文章
- Oracle查看SQL执行计划的方式
Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: ...
- Atitit sql执行计划
Atitit sql执行计划 1.1. 首先要搞明白什么叫执行计划? 执行计划是数据库根据SQL语句和相关表的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的 Oracle中的执行计划 ...
- 查看SQL执行计划
一用户进入某界面慢得要死,查看SQL执行计划如下(具体SQL语句就不完全公布了,截断的如下): call count cpu elapsed disk ...
- 查看Oracle SQL执行计划的常用方式
在查看SQL执行计划的时候有很多方式 我常用的方式有三种 SQL> explain plan for 2 select * from scott.emp where ename='KING'; ...
- sql执行计划解析案例(二)
sql执行计划解析案例(二) 今天是2013-10-09,本来以前自己在专注oracle sga中buffer cache 以及shared pool知识点的研究.但是在研究cache buffe ...
- Oracle之SQL优化专题01-查看SQL执行计划的方法
在我2014年总结的"SQL Tuning 基础概述"中,其实已经介绍了一些查看SQL执行计划的方法,但是不够系统和全面,所以本次SQL优化专题,就首先要系统的介绍一下查看SQL执 ...
- Oracle中SQL调优(SQL TUNING)之最权威获取SQL执行计划大全
该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...
- DB查询分析器7.01新增的周、月SQL执行计划功能
DB查询分析器7.01新增的周.月SQL执行计划功能 马根峰 (广东联合电子服务股份有限公司, 广州 510300) 1 引言 中国本土 ...
- SQL优化 MySQL版 -分析explain SQL执行计划与笛卡尔积
SQL优化 MySQL版 -分析explain SQL执行计划 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 首先我们先创建一个数据库,数据库中分别写三张表来存储数据; course: ...
随机推荐
- GCD 多线程同步
@property (strong, nonatomic) dispatch_queue_t barrierQueue; _barrieQueue = dispatch_queue_create(&q ...
- js 字符串比较
<script type="text/javascript"> function test(){ //1)纯数字之间比较 //alert(1<3);//true ...
- 20145227《Java程序设计》第1次实验报告
20145227<Java程序设计>第1次实验报告 实验步骤与内容 命令行下Java程序开发 1.打开 cmd ,输入 mkdir 20145227 命令建立实验目录,然后输入 cd 20 ...
- java 面试每日一题4
题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. publ ...
- Watch The Movie
Watch The Movie Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Tot ...
- userdebug版本开机串口log打开
在/bootable/bootloader/lk/app/mt_boot/mt_boot.c里修改: if (!has_set_p2u) { #ifdef USER_BUILD sprintf(cmd ...
- html介绍
Html的介绍 Html 是一种标记语言,主要的用处是开发网页 展示出文字,图片,视频,声音等等 是我们web开发的基础 做什么 所谓的静态页面,指的是能不能交互,而不是东西能不能动 网页设计师(ht ...
- Easyui主要组件用法
Easyui主要组件用法说明: 1. combogrid用法 说明:combogrid可提供翻页列表的数据选择并可进行数据的过滤查询(查询的传人参数为q,可在控制器中获取这个参数传过来的值,下面的示 ...
- Bootstrap——导航栏编写
<nav class="navbar navbar-default navbar-fixed-top" role="navigation"> ...
- java7-files读写文件
package com.du20150311Files; import java.io.BufferedReader; import java.io.BufferedWriter; import ja ...