很多朋友都问过我优化SQL的事情。我觉得在我不断地鼓励下,很多朋友现在都知道优化SQL之前要先看看执行计划,也在优化中获得了很多快乐。但是今天有人问我执行计划应该怎么看。我觉得这是个值得写一写的东西。

先告诉大家一个原则,看执行计划的时候,从第一行开始向右下看,一直到最右边。如果有并列的,那么先上再下。如果没并列,右边的先执行。

闲话少说,先上图吧:

这是一个简单的SQL的执行计划,这个执行计划告诉我们,id=2的最先执行,然后是id=3的,然后执行id=1的。

首先对test进行一次全表扫描,这一步返回rows=2,CPU的消耗为2。接下来对test1进行一次全表扫描,这一次返回的rows为2,CPU的消耗为3。接下来对这两个结果进行一次哈希连接(hash join),返回rows=1,这里的CPU消耗为6,但是需要注意,这次是我的语句赶寸了,6=2X3,但是哈希连接需要的CPU COST绝对不会恰恰是之前执行的操作的CPU COST之积,特别说明一下。至此,我们的oracle对这个语句的执行计划结束。

这个执行计划是怎么得到的?既然是计划,那么绝对不是把这个语句先执行一遍,然后把这个计算出来,那样的话这个执行计划就成了事后诸葛亮了。这个执行计划是oracle根据统计信息得到的。那么这个执行计划就有可能不准,请大家看看我的语句以及执行出来的结果:

SELECT A.SER_ID, B.OWNER FROM TEST A, TEST1 B WHERE A.AREA_ID = B.OWNER;

结果如图:

怎么样?绝对不是6行那么点点东西吧?这个表的统计信息看来非常非常旧了。于是我对两个表重新进行统计:

ANALYZE TABLE TEST COMPUTE STATISTICS;

ANALYZE TABLE TEST1 COMPUTE STATISTICS;
复制代码

然后再看看执行计划:

肿么样,这样就不是那么小了吧?test有12M行的返回。test1的owner字段只有两条记录:911和290。那么对应的test中area_id=290/911的有多少条记录呢?count一下:8485760,那么为什么是12M行呢?因为是全表扫描:

SELECT COUNT(*)/1024/1024 FROM TEST;

结果就是12。

现在可以总结一下了:执行计划的准确性(主要指数据返回,数据量大小)由统计信息的准确性决定。

转载于:https://blog.51cto.com/wingsless/788877

简介如何查看执行计划以及执行计划的准确性相关推荐

  1. 【Oracle】三种方式查看SQL语句的执行计划

    查看执行计划的方式有三种: EXPLAIN PLAN .V$SQL_PLAN .SQL*PLUS AUTOTRACE 1.EXPLAIN PLAN: 显示执行相应语句时可以使用的理论计划 读取执行计划 ...

  2. 查看sybase IQ的执行计划

    查看sybase IQ的执行计划 在性能调优工作中,首要的事情是找出性能瓶颈.而针对数据库应用,由于商用数据库对上层应用来说是个黑盒,所以往往需要借助数据库的一些接口或工具来了解数据库的具体行为,并结 ...

  3. linux计划任务执行bin文件,Linux任务计划和周期性任务执行

    linux计划任务有两类 at:未来某个时间点仅执行一次任务就结束的指令,at指令执行时必须要有atd这个服务支持. crontab:可以以时间单位为分钟,小时,每天,每周,每月,每年等循环执行某任务 ...

  4. oracle执行脚本顺序执行吗,【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 - 不及格的飞鱼...

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件. 首先,Quartz表达式培植的启动时间为 ...

  5. linux 每周日执行脚本,Linux任务计划和周期性任务执行

    linux计划任务有两类 at:未来某个时间点仅执行一次任务就结束的指令,at指令执行时必须要有atd这个服务支持. crontab:可以以时间单位为分钟,小时,每天,每周,每月,每年等循环执行某任务 ...

  6. linux设备负责执行计划任务,Linux计划任务详解,很详细,每一行命令都有相对应的白话解释。...

    计划任务 计划任务的作用是:做一些周期性的任务,目前最主要的用途是定期备份数据. 计划任务主要分为一次性调度执行at和循环调度执行cron,下面我就围绕着at和cron来讲解. 一次性调度执行at a ...

  7. oracle执行计划没有执行索引,oracle理解执行计划之索引相关

    一.什么是执行计划 所谓执行计划,就是在执行一个SQL前,做出的一份数据库认为最佳的方案.好比在北京上班,是做地铁去还是公交车亦或开车自驾等等.如果做地铁,需要从哪儿换成之类的,... ...从各种方 ...

  8. windows计划任务执行powershell脚本

    假如有一个powershell脚本要用计划任务运行,然而powershell脚本并非"双击"就可以打开,那么该如何运行呢? 难点: 0 一些权限导致无法加载脚本 1 如何执行.ps ...

  9. windows设置任务计划定时执行php程序,两种方法

    windows设置任务计划定时执行php程序,两种方法 1.定时执行bat文件 2.定时执行php文件 1.定时执行bat文件 新建一个php文件 :在php文件写入你要执行的程序: <?php ...

  10. oracle 阻止谓语前推,Oracle之深入浅出(二)--SQL原理、解释计划与执行计划

    2.SQL执行原理 2.1.软解析与硬解析 在执行每一条sql的时候,oracle必须解析sql并且装载到高速缓存中,解析的过程包括很多内容,验证语法.检验提及的对象.确认用户权限等过程后还需要手机它 ...

最新文章

  1. 力扣(LeetCode)刷题,简单题(第24期)
  2. 人脸识别“热”中的冷思考:道德伦理问题值得深思
  3. 编程之美-电梯调度算法方法整理
  4. 2021-09-15
  5. 同样的sql在两个oracle,sql – 从两个会话INSERT到唯一列相同的值(Oracle)
  6. asp将新闻内容写入mysql数库据_在ASP.net中保存/取出图片入/从SQL数据库
  7. php 周末 培训,济南php周末培训班
  8. mfc单文档中如何将view的基类由CView转为CScrollview
  9. excel删除重复数据保留一条_Excel一键删除重复数据,你居然还用逐条排查?
  10. [20160325]bbed是否有4G的限制.txt
  11. 异步和同步的机制问题
  12. UI设计和平面设计有什么区别哪个前景更好
  13. 虚拟IP技术 ip地址漂移技术
  14. 程序员常用字体(vs字体修改方案)
  15. postman 解决Could not send request
  16. 服务器查看光模块信息的命令,通过命令行界面(CLI)查看在交换机的光模块状态...
  17. C语言 简易计算器 //支持求阶乘
  18. Excle常用快捷键
  19. SQLite安装与使用 (Linux)
  20. 6种方法给Vmware虚拟机清理瘦身

热门文章

  1. c语言 结构体声明和引用、,结构体的声明与自引用
  2. php程序如何保证3秒作出响应,这个留言本的响应时间总是在3秒左右,如何优化?...
  3. python三维可视化图,如何使用Python在(交互式)3D中可视化图形?
  4. Android服务显式启动、隐式启动、绑定服务、本地客户端调用远程服务器音乐文件
  5. html非封闭标签,自封闭的html标签
  6. 20200308: 生成每种字符都是奇数个的字符串灯泡开关 III(leetcode5352-5353)
  7. 20190816:(leetcode习题)有效的数独
  8. excel 相邻数计算机,Excel计算公式大全.doc
  9. java语言采用16位颜色标准_华为Java笔试题一
  10. layui中列表用文字代表指定数字