达梦执行计划学习理解

执行计划是对SQL语句在数据库中的执行过程或访问路径的描述。对于一个SQL查询任务,执行计划是数据库给出的完成此任务的纤细方案。

创建表和相关索引。

create table t1(c1 int,c2 char);
create table t2(d1 int,d2 char);
create index idx_t1_c1 on t1(c1);
insert into t1 values(1,'A');
insert into t1 values(2,'B');
insert into t1 values(3,'C');
insert into t1 values(4,'D');
insert into t1 values(5,'E');
insert into t2 values(1,'A');
insert into t2 values(2,'B');
insert into t2 values(6,'C');
insert into t2 values(7,'D');

再使用EXPLAN语句查看执行计划如下:

执行计划看起来就像一棵树。执行过程为:控制流从上向下传递,数据流从下向上传递。其中,类似【1,4,56】这样的三个数字,分别表示估算的操作符代价(毫秒)、处理的记录行数和每行记录的字节数。对于同一层次中的操作符,如本例中的CSCN2和SEEK2,由父节点NEST LOOP INDEX JOIN2控制他们的执行顺序。

该计划的大致执行流程如下:

  1. CSCN2:扫描t2表的聚集索引,数据传递给父节点。
  2. NEST LOOP INDEX JOIN2:当左孩子节点有数据返回时取右侧数据。
  3. SSEK:利用t2表当前的d1值作为二级索引IND_T1_C1定位查找的键,返回结果给父节点。
  4. NEST LOOP INDEX JOIN2:若右孩子节点有数据,则将结果传递给父节点PRJT2,否则继续读取左孩子节点的下一条记录。
  5. PRJT2:计算表达式C1+1和d2的值。
  6. NSET2:输出最后结果。
  7. 重复过程(1)—(4)直至左侧的CSCN2数据全部取完。

执行计划的常见操作符:

NEST2:用于结果集收集的操作符

PRJT2:关系的投影运算,用于选择表达式的计算;

BLKUP2:二次扫描(回表)

SSEK2:二级索引扫描

SLCT:选择,用于查询条件的过滤;

AAGR:简单聚集,用于没有GROUP BY的COUNT、SUM等聚集函数的计算;

HASH JOIN:哈希连接,在没有索引或索引无法使用情况下的表的连接方式。

说明:达梦默认创建的是索引组织表,每个表都有一个唯一的聚簇索引(clustered index ),除此之外的非聚簇索引叫二级索引(secondary indexes)。

在disql中设置set autotrace trace后执行可以显示真实计划

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值