文档章节

执行计划小试牛刀

黑眼圈君
 黑眼圈君
发布于 2016/09/08 14:16
字数 688
阅读 16
收藏 0

前要:

    写完sql需要找DBA进行sql review,看执行计划是必不可少的步骤,一直不太懂执行计划,特此学习下。

1.什么是执行计划,为什么需要看懂执行计划?

    对于sql优化来说,读懂执行计划是非常重要的,也是最关键的一步,因为执行计划就是oracle根据业务sql来生成的一种规则,用来查询到想要得到的数据。

    执行一个sql语句,oracle database 需要几个步骤来完成。执行计划包含:每个表的读取方法,表的连接顺序。

2.如何查看执行计划:

    explain plan for sql;

    select plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE'));

    或者
    select * from table(dbms_xplan.display);

    PS:查看执行计划有很多种方式,只是列举了其中一种方法。

3.小试牛刀:

①第一个sql:

    select * from bus_fund_sell_confirm t where t.batch_id in (
select distinct t2.id from bus_fund_sell_request t1,bus_fund_batch t2 where t1.batch_id = t2.req_batch_id);

②第二个sql:

    select distinct t3.* from bus_fund_sell_request t1,bus_fund_batch t2,bus_fund_sell_confirm t3 where t1.batch_id = t2.req_batch_id and t3.batch_id = t2.id

分别查看各自的执行计划:

①:explain plan for
select * from bus_fund_sell_confirm t where t.batch_id in (
select distinct t2.id from bus_fund_sell_request t1,bus_fund_batch t2 where t1.batch_id = t2.req_batch_id);

得到:

    

②:explain plan for  (
select distinct t3.* from bus_fund_sell_request t1,bus_fund_batch t2,bus_fund_sell_confirm t3 where t1.batch_id = t2.req_batch_id and t3.batch_id = t2.id);

得到

OK,下面就需要介绍一下里面列出的这写鬼东西到底是什么含义?

4.含义讲解:

    字段解释:

       ID: 执行序列,但不是执行的先后顺序。执行的先后根据Operation缩进来判断(采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID就最先执行。 一般按缩进长度来判断,缩进最大的最先执行,如果有2行缩进一样,那么就先执行上面的。) 

       Operation: 当前操作的内容。

       Rows: 当前操作的Cardinality,Oracle估计当前操作的返回结果集。

       Cost(CPU):Oracle 计算出来的一个数值(代价),用于说明SQL执行的代价。

       Time:Oracle 估计当前操作的时间。

        ------------------------------------------------------------------------------------------

        谓词说明:

        Access: 表示这个谓词条件的值将会影响数据的访问路劲(表还是索引)。

       Filter:表示谓词条件的值不会影响数据的访问路劲,只起过滤的作用。

在谓词中主要注意access,要考虑谓词的条件,使用的访问路径是否正确。

-----------------------------------------------------------------------------------------

    明显可以看出上面的第一种方式效率更高,只进行了两次全表扫描。

5.总结:

随手一记,不正之处,欢迎指正。因为对sql优化略感兴趣,后续学习更新,算知道了什么是执行计划。

© 著作权归作者所有

上一篇: 网络协议
黑眼圈君
粉丝 3
博文 21
码字总数 14516
作品 0
松江
程序员
私信 提问
Python3学习笔记01-第一个Python程序

在本地安装好后Python后,进入命令行模式,输入Python,就进入Python的交互模式: 小试牛刀,打印第一个程序: 使用文本编辑器编写代码,然后再切换到命令窗口执行: Mac环境中开发: 在终端...

Corwien
2016/04/20
48
0
IOS IPhone 开发需要的开源库[编辑中.. 不断更新]

前言 我是 java & php 程序员,遇到了坑爹的iPhone,被逼无奈在崩溃的边缘下学习object-c ,在学习中遇到了很多 奇葩,无知,龌蹉,呕吐的问题(弱弱的说 : 有的些问题到现在还不知道具体的原...

海参
2013/06/03
2.1K
6
JUnit中按照顺序执行测试方式

很多情况下,写了一堆的test case,希望某一些test case必须在某个test case之后执行。比如,测试某一个Dao代码,希望添加的case在最前面,然后是修改或者查询,最后才是删除,以前的做法把所...

彭苏云
2015/08/09
1K
0
做大数据分析的怎么可以不会这个?

Overview:0 引言1 环境2 模块准备3 实现思路4 小试牛刀5 中试牛刀6 总结 0 引言 词云图,也叫文字云,是对文本中出现频率较高的“关键词”予以视觉化的展现,词云图过滤掉大量的低频低质的文...

上海小胖
04/03
12
0
MyBatis原理简介和小试牛刀

在我看来mybatis的原理与hibernate在某些方面是一致的,先回顾一下Hibernate原理(原理主要上是要掌握并理解下列六个对象: Hibernate中重要的六个对象: Configuration:读取配置文件(主要指h...

youcongtech
2017/11/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

让《强化学习(第2版)》架起一座通往强化学习经典知识宝库的桥梁

上交大计算科学与工程系俞凯教授,5分钟口述讲解,带你快速认识了解年度重磅图书《强化学习(第二版)》! 在 AlphaGo战胜李世石之后,AlphaZero以其完全凭借自我学习超越人类在各种棋类游戏...

博文视点Bv
4分钟前
2
0
TLA7-EVM开发板的处理器、NOR FLASH、DDR3

TLA7-EVM开发板是一款由广州创龙基于Xilinx Artix-7系列FPGA自主研发的核心板+底板方式的开发板,可快速评估FPGA性能。核心板尺寸仅70mm*50mm,底板采用沉金无铅工艺的6层板设计,专业的PCB...

Tronlong创龙
12分钟前
2
0
UUID的变种-有序

为了解决UUID无序的问题,NHibernate在其主键生成方式中提供了Comb算法(combined guid/timestamp)。保留GUID的10个字节,用另6个字节表示GUID生成的时间(DateTime)。 /// <summary> //...

Canaan_
13分钟前
2
0
Netty学习(6)——通道间数据传输

1. FileChannel实现通道间的数据传输 在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel传输到另外一个channel。 transferFrom() FileChannel的transferF...

江左煤郎
16分钟前
2
0
AngularDOM操作

gtandsn
17分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部