文件名称:执行计划-the design and analysis of algorithms
文件大小:4.17MB
文件格式:PDF
更新时间:2024-06-29 04:39:08
达梦,DM7
28.6 执行计划 执行计划是 SQL 语句的执行方式,由查询优化器为语句设计的执行方式,交给执行器 去执行。在 SQL命令行使用 EXPLAIN可以打印出语句的执行计划。 例如: 建表和建索引语句: 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 T2 VALUES(1,'A'); INSERT INTO T2 VALUES(2,'B'); INSERT INTO T2 VALUES(5,'C'); INSERT INTO T2 VALUES(6,'D'); 打印执行计划: EXPLAIN SELECT A.C1+1,B.D2 FROM T1 A, T2 B WHERE A.C1 = B.D1; 执行计划如下: 1 #NSET2: [0, 16, 9] 2 #PRJT2: [0, 16, 9]; EXP_NUM(2), IS_ATOM(FALSE) 3 #NEST LOOP INDEX JOIN2: [0, 16, 9] 4 #CSCN2: [0, 4, 5]; INDEX33555535(B) 5 #SSEK2: [0, 4, 0]; SCAN_TYPE(ASC), IDX_T1_C1 (A), SCAN_RANGE[T2.D1,T2.D1] 这个执行计划看起来就像一棵树,执行过程为:控制流从上向下传递,数据流从下向上 传递。其中,类似[0, 16, 9]这样的三个数字,分别表示估算的操作符代价、处理的记录 行数和每行记录的字节数。同一层次中的操作符,如本例中的 CSCN和 SSEK,由父节点 NEST LOOP INDEX JOIN控制它们的执行顺序。 该计划的大致执行流程如下: 1) CSCN2: 扫描 T2表的聚集索引,数据传递给父节点索引连接; 2) NEST LOOP INDEX JOIN2: 当左孩子有数据返回时取右侧数据; 3) SSEK: 利用 T2表当前的 D1值作为二级索引 IDX_T1_C1定位查找的 KEY,返回 结果给父节点; 4) NEST LOOP INDEX JOIN2: 如果右孩子有数据则将结果传递给父节点 PRJT2, 否则继续取左孩子的下一条记录; 5) PRJT2: 进行表达式计算 C1+1, D2; 6) NSET2: 输出最后结果;