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;
标签:explain,常见,扫描,查询,索引,cost,执行,KingbaseES,节点
From: https://www.cnblogs.com/kingbase/p/17931012.html