KingbaseES中explain命令来查看执行计划时最常用的方式。其命令格式如下:

explain [option] statement

其中option为可选项,常用的是以下5种情况的组合:

  • analyze:执行SQL并且显示实际的运行时间和其他统计信息,默认FALSE。注意:加了analyze会真正执行SQL语句
  • verbose:显示附加信息,比如计划树中每个节点输出的字段名等,默认FALSE
  • costs: 包括每个计划节点的启动成本预估和总成本的消耗,也包括行数和行宽度的预估,默认TRUE。
  • buffers:使用信息,特别包括共享块命中、读、脏和写的次数,本地块命中、读、脏和写,临时块读和写的次数。默认FALSE,前置条件是analyze
  • format:声明输出格式,可以为TEXT、XML、JSON 或 YAML,默认 TEXT

explain输出

explain select * from student where sname='ada';

QUERY PLAN
------------------------------------------------------------------------
Index Scan using idx_stu on student (cost=0.14..8.15 rows=1 width=10)
Index Cond: (sname = 'ada'::text)
(2 行记录)

cost:这是查询执行的总代价。代价是通过估计查询执行所需的资源和时间来计算的,代价越低表示查询执行越高效。

以点点“..”分为2个部分数字,第一个数字表示启动的成本,也就是返回第一行需要多少cost值;第二个数字表示返回所有的数据的成本。

0.14: 这是查询执行的启始代价,也就是开始执行查询时的代价估计。

8.15: 这是查询执行的总代价,表示执行整个查询所需的估计代价。

默认 cost 值如下:

  • 顺序扫描一个数据块,cost值定为1,参数为seq_page_cost
  • 随机扫描一个数据块,cost值定为4,参数为random_page_cost
  • 处理一个数据行的CPU,cost为0.01,参数为cpu_tuple_cost
  • 处理一个索引行的CPU,cost为0.005,参数为cpu_index_tuple_cost
  • 每个操作符的 CPU 代价为 0.0025,参数为cpu_operator_cost rows
  • rows:表示预估返回多少行
  • width:表示每行平均宽度为多少字节。本例中,每一行的宽度是10字节

常见的执行计划节点

  • Seq Scan:全表扫描,当数据表中没有索引,或者满足条件的数据集较大,索引扫描的成本高于全表扫描,这时规划器会选择使用全表扫描。
  • Index Scan:索引扫描,查询列有索引,则直接扫描索引,不再进行全表扫描,耗费时间小于全表扫描。
  • Index Only Scan:全索引扫描,当查询的条件都在索引中,也会走该扫描方式,不会读取表文件。
  • Bitmap Index Scan:位图索引扫描,也是一种走索引的方式,方法是扫描索引,把满足条件的行或者块在内存中建一个位图,扫描完索引后,再跟进位图中记录的指针到表的数据文件读取相应的数据。

    在or、and、in子句和有多个条件都可以同时走不同的索引时,都可能走Bitmap Index Scan。
  • Filter:条件过滤
  • Nestloop Join:嵌套循环连接,是在两个表做连接时,从一张表中读取数据(驱动表outer table),然后访问另一张表(被查找表 inner table,通常有索引)。驱动表中的每一行与inner表中的相应记录JOIN。类似一个嵌套的循环。
  • Hash Join :散列连接,是优化器做大数据集连接时的常用方式,优化器使用两个表中较小的表(通常是小一点的那个表或数据源)利用连接键(JOIN KEY)在内存中建立散列表,将列数据存储到hash列表中,然后扫描较大的表,

    同样对JOIN KEY进行HASH后探测散列表,找出与散列表匹配的行。需要注意的是:如果HASH表太大,无法一次构造在内存中,则分成若干个部分,写入磁盘的临时文件,会多一个写的代价,降低效率。
  • Merge Join:排序合并连接,是先将关联表的关联列各自做排序,然后从各自的排序表中抽取数据,到另一个排序表中做匹配。

对于某些DML语句,如果即想运行explain analyze命令,又不想影响实际的数据,则可以把该命令放入一个事务里,执行完后回滚事务。

begin;
explain analyze update student set ssex=false where sname='ada';
rollback;

KingbaseES 执行计划常见节点介绍的更多相关文章

  1. sql server 执行计划(execution plan)介绍

    大纲:目的介绍sql server 中执行计划的大致使用,当遇到查询性能瓶颈时,可以发挥用处,而且带有比较详细的学习文档和计划,阅读者可以按照我计划进行,从而达到对执行计划一个比较系统的学习. 什么是 ...

  2. ORACLE的执行计划

    转自:http://www.cnblogs.com/lovingprince/archive/2007/12/07/2166400.html 背景知识:        为了更好的进行下面的内容我们必须 ...

  3. Oracle调优之看懂Oracle执行计划

    @ 目录 1.文章写作前言简介 2.什么是执行计划? 3.怎么查看执行计划? 4.查看真实执行计划 5.看懂Oracle执行计划 5.1 查看explain 5.2 explain执行顺序 5.3 访 ...

  4. oracle之如何获取执行计划方法

    1.什么是执行计划 为了执行sql语句,Oracle在内部必须实现许多步骤,这些步骤可能是从数据库中物理检索数据行,或者用某种方法来准备数据行等,接着Oracle会按照一定的顺序一次执行这些步骤,最后 ...

  5. SQL Tuning 基础概述10 - 体会索引的常见执行计划

    在<SQL Tuning 基础概述05 - Oracle 索引类型及介绍>的1.5小节,提到了几种"索引的常见执行计划": INDEX FULL SCAN:索引的全扫描 ...

  6. db2执行计划介绍

    在数据库调优过程中,SQL语句往往是导致性能问题的主要原因,而执行计划则是解释SQL语句执行过程的语言,只有充分读懂执行计划才能在数据库性能优化中做到游刃有余. 常见的关系型数据库中,虽然执行计划的表 ...

  7. Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化

    Python进阶----索引原理,mysql常见的索引,索引的使用,索引的优化,不能命中索引的情况,explain执行计划,慢查询和慢日志, 多表联查优化 一丶索引原理 什么是索引:       索引 ...

  8. 执行计划中常见index访问方式(转)

    近期有朋友对于单个表上的index各种情况比较模糊,这里对于单个表上,单个index出现的大多数情况进行了总结性测试,给出了测试结果,至于为什么出现这样的试验结果未做过多解释,给读者留下思考的空间.本 ...

  9. 巧用DISPLAY_AWR函数与dba_hist_sqlstat结合查询SQL语句在指定节点指定时间范围内的历史执行计划

    1.问题        通过调用dbms_xplan包中DISPLAY_AWR函数(DBMS_XPLAN.DISPLAY_AWR)可以从AWR数据中查看到SQL语句的历史执行计划,但是,DISPLAY ...

  10. MySQL优化-》执行计划和常见索引

    MySql的explain执行计划 explain是一个Mysql性能显示的工具,它显示了MySQL如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句.在开发当 ...

随机推荐

  1. IPFS 添加和管理文件

    IPFS的文件有不同的模式 默认模式 默认模式下, 文件会被解析并存入blocks, 同时文件的结构被存入filestore, 因为IPFS是按内容寻址的文件系统, 在添加时最外层的目录名或文件名信息 ...

  2. 解决:EXP-00003: 未找到段 (0,0) 的存储定义报错

    问题说明 DB服务器oracle版本:11.2.0.4.0 最近在客户端用exp命令导出部分表时报错,如题.搜索了一下,找到以下解决方案: 问题原因 Oracle 11g 有一个参数deferred_ ...

  3. 2020-11-18 原生js实现自动打字效果

    原理 使用定时器,对要输出的文字进行遍历,每遍历一次,都增加一个字以及在段尾加上"|"暗示别人正在打字. js代码 const fangWrite = (theString, qu ...

  4. 国内如何快速访问GitHub

    1.国内如何快速访问gibhub -FQ的方法无非就是用软件,这种就不介绍了 -本次介绍的是修改本地系统主机hosts文件,绕过国内dns解析,达到快速访问github 打开https://tool. ...

  5. ASP.NET Core MVC应用模型的构建[2]: 定制应用模型

    在对应用模型的基本构建方式具有大致的了解之后,我们来系统地认识一下描述应用模型的ApplicationModel类型.对于一个描述MVC应用模型的ApplicationModel对象来说,它承载的元数 ...

  6. [软件工程] CMMI是什么?

    序 能力成熟度模型集成(CMMI) 一.CMMI(能力成熟度模型集成)概述 CMMI是由美国软件工程学会(software engineering institue,简称SEI)制定的一套专门针对软件 ...

  7. Android内存优化—内存优化总结

    内存优化总结 内存问题 内存抖动:导致GC导致卡顿 内存泄漏:导致频繁GC,可用内存减少 内存溢出:导致OOM 工具排查 AS中的Profiler查看内存情况,是否锯齿状,是否持续上升 MAT排查 L ...

  8. Vue源码学习(十):关于dep和watcher使用的一些思考

    好家伙,   前面想了好久,都没想明白为什么要dep和watcher打配合才能实现数据-视图同步 为什么要多一个依赖管理这样的东西 给每个数据绑个watcher(xxfunction),然后,数据变了 ...

  9. The OCaml Language Cheatsheets

    The OCaml Language Cheatsheets OCaml v.4.08.1 Syntax Implementations are in .ml files, interfaces ar ...

  10. 【Azure 应用服务】如何让App Service 支持 Delete 方法 

    问题描述 如何让webapp 支持 delete 方法? 在不修改设置的情况下,调用DELETE方法出现405错误 - 方法不被允许 问题解决 基于当前App Service在Windows的环境中运 ...