ITPub博客

首页 > 数据库 > 国内数据库 > 输出并分析gbase8s查询计划

输出并分析gbase8s查询计划

原创 国内数据库 作者:DMD_202007 时间:2021-04-25 15:32:49 0 删除 编辑

一.    通过Set explain on 来输出查询计划

Set explain on 是 GBase 8s 后台查看执行计划的命令,在执行 SQL 语句之前执行该语句。

SET EXPLAIN 语句的基本语法如下:

>>-SET EXPLAIN-------------------------------------------------------------------><

|----OFF-------------------------------------------|

| -ON----------------------------------------------|

| -AVOID_EXECUTE- |

|-FILE TO---'filename '-------------------------|

其中,

ON :为每个后续查询生成评估并将结果写入当前目录中的输出文件。如果文件已经存在,那么新输出会附加到现有文件中。

AVOID_EXECUTE :防止 SELECT 、INSERT 、UPDATE 或 DELETE 语句在数据库服务器将查询计划打印到输出文件中时执行。

OFF :终止 SET EXPLAIN 语句的活动,以便不再为后续查询生成评估或不再将评估写入输出文件 。

FILE TO :为每个后续查询生成评估并使我们能够指定说明输出文件的位置。

下面 SQL 语句的查询计划,执行该 SQL 语句:

SET EXPLAIN ON;

SELECT * FROM t1 WHERE name='lili';

 

如果用户希望了解下述 SQL 语句的查询计划但不希望执行下述 SQL 语句,则我们

可以执行:

SET EXPLAIN ON AVOID_EXECUTE;

SELECT * FROM t1 WHERE name='lili';

 

如果用户希望了解下述 SQL 语句的查询计划,并将结果输出到自己指定的文件,则

该文件为数据库服务器端的文件信息:

SET EXPLAIN ON AVOID_EXECUTE;

SET EXPLAIN FILE TO '/tmp/explain.out'

SELECT * FROM t1 WHERE name='lili';

 

二.    查询计划输出内容分析

输出的查询计划包含以下几个部分:

(1 )执行时间(OPTIMIZATION TIMESTAMP ):执行 SQL 语句的实际时间。

(2 )查询语句:执行计划的原 SQL 语句。

(3 )预估开销值(Estimated cost ):优化器用来决定查询路径的数值。与查询耗时不直接相关,不能用于比较不同 SQL 的执行效率,可用于比较相同 SQL 不同执行计划的执行开销。

(4 )预估返回行数(Estimated # of Rows Returned ):基于数据库系统表的信息,预估SQL 语句返回的数据行数。

(5 )表的访问顺序。

(6 )表的访问方法。

(7 )使用的索引路径。

(8 )实际执行情况统计(Query statistics )。

示例如下:

QUERY: (OPTIMIZATION TIMESTAMP: 08-04-2015 03:03:43) -- ①执行时间 ------

 

-- ②执行的 SQL  语句

SELECT * FROM customer, orders

WHERE customer.customer_num = orders.customer_num

 

Estimated Cost: 9 -- ③预估开销值

Estimated # of Rows Returned: 23 -- ④预估返回行数 -

 

⑤表访问顺序 1. 表 orders 2. 表 customer

⑥表访问方法 orders  使用顺序扫描( SEQUENTIAL SCAN )

customer  使用索引( INDEX PATH )

1)orders: SEQUENTIAL SCAN

2)customer: INDEX PATH

 

-- ⑦使用的索引名为” 100_1 ” ,索引包含字段 customer_num ,使用的索引过滤条件为 customer.customer_num =orders.customer_num

 

(1) Index Name: 100_1

Index Keys: customer_num (Serial, fragments: ALL)

Lower Index Filter:customer.customer_num =orders.customer_num

NESTED LOOP JOIN

 

-- ⑧实际执行情况统计:

名称

含义

type

操作类型

table

表名(实名从 Table map 表中对应)

rows_prod

实际操作行数

est_rows

预估操作行数

rows_scan

实际扫描行数

time

实际执行时间

est_cost

预估开销值

Query statistics:

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

Table map :

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

Internal name Table name

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

t1 orders

t2 customer

type table rows_prod est_rows rows_scan time est_cost

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

scan t1 23 23 23 00:00.00 3

type table rows_prod est_rows rows_scan time est_cost

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

scan t2 23 28 23 00:00.00 0

type rows_prod est_rows time est_cost

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

nljoin 23 23 00:00.00 10


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69980677/viewspace-2769753/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-07-31

  • 博文量
    36
  • 访问量
    31943