PL/SQL执行计划查看
一.如何查看PLSQL的执行计划
在SQl Window窗口输入sql语句,然后按键"F5",就会进入执行计划查看界面。
二.界面说明
首先我们看第二行有几个属性可以选“Tree”、“HTML”、“Text”、“XML”。这几个里面的核心数据是一样的,不同的只是对核心数据的展示方式,分别为Tree、HTML、Text、XML。这个可以根据个人习惯来进行选择。
再下面有几个列属性(每个人的列属性可能会不同,这个是可以在PLSQL中进行配置)
我们首先看第一列的Description:下面的内容分别是我们这条SQL的执行步骤,缩进量最多的步骤最先执行,如果缩进量相同,则按照从上往下的顺序执行。
Object owner:对象的所有者。
Object name:对象名称。
Cost:成本花费。这里可以详细地查看SQL执行的每一步的成本花费。
Time:执行时间。
三.如何优化SQL
1.查看SQL是全表扫描还是利用索引查询。
假设有一张表t_srhs_jks,里面有1000万条数据,我们在这张表中执行一条SQL:
我们可以看到根据条件dtnm=****查询数据,由于DTNM字段不是索引,因此首先执行了"TABLE ACCESS FULL",即全表搜索,然后再执行上面的"SELECT STATEMENT, GOAL = ALL ROWS"查询出所有数据行。
在这条SQL中的成本花费一共是14287(Cost=14287),执行时间是172(Time=172)。
然后我们对dtnm字段添加索引后再执行这条SQL:
相比第一次执行,这里的成本花费只有5385,执行时间只有65,减少了将近一倍。
然后我们再来查看一下Description下的执行步骤:
(1)INDEX RANGE SCAN:索引范围内查找。
(2)TABLE ACCESS BY INDEX ROWID:根据索引找到的ROWID来查找需要的数据。
(3)SELECT STATEMENT,GOAL = ALL ROWS:根据找到的数据,返回所有行。
关于索引的扫描类型:
1)index unique scan:索引唯一扫描。
单列唯一索引:通过"="判断条件时候才会使用,至多返回一条数据。
多列唯一索引:所有的列都通过"="判断条件时才会使用,且不能有任何一列的值被指定为null。
2)index range scan:索引范围扫描。
单列唯一索引:通过">"、"<"、">="、"<="、"between"等判断条件时会被使用。
多列唯一索引:全部或部分列(必须包含第一列,否则不会走这条索引)通过">"、"<"、">="、"<="、"between"等判断条件时会被使用。部分列也可以在通过"="判断条件时候被使用。
普通索引:单列索引正常的条件判读都会使用范围扫描,多列的索引必须带有第一列索引的条件判断才会被使用范围扫描。
3)index skip scan:索引跳跃扫描。
只有当组合索引,且引导列(第一列)没有被使用的情况下,可能会使用索引跳跃扫描。一般发生在引导列的distinct值很少的情况下。oracle帮我们改写了sql语句,如select * from A where b=100,组合索引(a,b)中a的取值只有1和2时,sql会被改写为select * from A where a = 1 and b = 100 union all select * from A where a = 2 and b = 100。
4)index full scan:索引全扫描。
这一个和索引快速扫描异曲同工。通常是在使用索引列进行count、sum等函数统计时候使用。
5)index fast full scan:索引快速扫描。
关于索引,有以下几种情况时候不会被使用(只针对数据字段查询,不包括count、sum等函数统计):
1)'%'被添加在参数前面。
2)带'not'的条件,包括'<>'、'!='。
3)执行函数(函数索引除外。如果定义的是函数索引,即使使用函数仍然是可能会走索引。)
4)格式不正确(下图的jksbh字段是vchar类型,令它与number类型比较,不会走索引。)
5)使用null判断
PL/SQL执行计划查看的更多相关文章
- 利用pl/sql执行计划评估SQL语句的性能简析
一段SQL代码写好以后,可以通过查看SQL的执行计划,初步预测该SQL在运行时的性能好坏,尤其是在发现某个SQL语句的效率较差时,我们可以通过查看执行计划,分析出该SQL代码的问题所在. 那么,作为 ...
- MySql 的SQL执行计划查看,判断是否走索引
在select窗口中,执行以下语句: set profiling =1; -- 打开profile分析工具show variables like '%profil%'; -- 查看是否生效show p ...
- Oracle查看SQL执行计划的方式
Oracle查看SQL执行计划的方式 获取Oracle sql执行计划并查看执行计划,是掌握和判断数据库性能的基本技巧.下面案例介绍了多种查看sql执行计划的方式: 基本有以下几种方式: ...
- 查看SQL执行计划
一用户进入某界面慢得要死,查看SQL执行计划如下(具体SQL语句就不完全公布了,截断的如下): call count cpu elapsed disk ...
- 查看Oracle SQL执行计划的常用方式
在查看SQL执行计划的时候有很多方式 我常用的方式有三种 SQL> explain plan for 2 select * from scott.emp where ename='KING'; ...
- plsql中查看sql执行计划
想要优化sql语句,可以从sql执行计划入手. 在plsql客户端,提供了一个方便的按钮来查看执行计划 选中需要查看的sql语句,点击此按钮,就可以看到该条语句的执行计划了. 结果集包括描述,用户,对 ...
- EXPLAIN 查看 SQL 执行计划
EXPLAIN 查看 SQL 执行计划.分析索引的效率: id:id 列数字越大越先执行: 如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. ...
- Oracle之SQL优化专题01-查看SQL执行计划的方法
在我2014年总结的"SQL Tuning 基础概述"中,其实已经介绍了一些查看SQL执行计划的方法,但是不够系统和全面,所以本次SQL优化专题,就首先要系统的介绍一下查看SQL执 ...
- Oracle之SQL优化专题02-稳固SQL执行计划的方法
首先构建一个简单的测试用例来实际演示: create table emp as select * from scott.emp; create table dept as select * from ...
随机推荐
- Weex开发中的应用小笔记
内容: 获取输入或其他操作使得值一直改变并在一段不改变的时间后执行下一步操作(输入搜索关键字并执行搜索) https://vuejs.org/v2/guide/computed.html?spm=a2 ...
- JS数组循环的性能和效率分析(for、while、forEach、map、for of)
从最简单的for循环说起 for( 初始化:条件; ){} 条件为Trusy 值时候,可以继续执行for 循环,当条件变为Falsy 时跳出for循环.for循环常见的四种写法const person ...
- 最长连续子序列(dp,分而治之递归)
5227: 最大子列和问题 时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte 总提交: 76 测试通过:46 描述 给定KK个整数组 ...
- numpy(三)
广播: x= np.arange(12).reshape((3,4)) a= np.arange(3) b=np.arange(3)[;,np.newaxis] c=a+b a,b会扩散成公共的形状进 ...
- 10、jeecg 默认为空的字段值是如何被填充的?
1.前言 用过 jeecg 的小伙伴,在 jeecg 实体中常见下面几个字段: /**创建人名称*/ private java.lang.String createName; /**创建人登录名称*/ ...
- DAX/PowerBI系列 - 玩转阿里云 Alicloud Pricing
DAX/PowerBI系列 - 玩转 阿里云主机 Ali Cloud ECS 难度: ★★☆☆☆(1星) 适用范围: ★★★☆☆(3星) 欢迎交流与骚扰 这是啥: 双十一就到了,码农门,程序猿们有没有 ...
- A-the Beatles
传送门: 题意:题目给出n,k分别代表在这个环中饭店的个数和两个饭店相离的距离.然后再给出一组a,b分别代表在某一点s里最近饭店的距离和在这个s点走一步之后到达的点离最近饭店的距离. 然后问这个人再次 ...
- Oracle 12C CRS-5013
1.背景 OS:SUSE 12SP3 DB:12.2.0.1.190115 2节点RAC Q:crs alert日志一直刷如下报错 2019-02-12 12:46:18.163 [ORAAGENT( ...
- Markdown学习示例
Markdown学习示例 什么是Markdown Markdown是一种在web显示带样式风格文本的方式.你能通过它控制文本的字体样式.插入图片.插入列表等.通常,Markdown使用一些特殊的非字母 ...
- .NET CORE 使用Dapper连接MSSQL,MYSQL
Project file: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <Outp ...