没有合适的资源?快使用搜索试试~ 我知道了~
达梦数据库执行计划操作符介绍
4星 · 超过85%的资源 需积分: 50 9 下载量 43 浏览量
2015-07-07
10:47:36
上传
评论 1
收藏 37KB DOCX 举报
温馨提示
试读
19页
国产数据库达梦7的执行计划操作符介绍,理解了这些操作符,能更好的读懂执行计划
资源推荐
资源详情
资源评论
DM7 SQL 操作符清单
为了便于说明,先创建 4 个表:
create table t1(c1 int, c2 int);
create table t2(c1 int, c2 int);
create table t3(c1 int primary key, c2 int);
create table tx(c1 int, c2 varchar(100), c3 int, cluster primary
key(c1));
/* tx 插点数据 */
begin
for i in 1..100000 loop
insert into tx values(i, 'aaaaaaa', i);
end loop;
commit;
end;
操作符如果有两个儿子,则称为二元操作符,如果只有一个儿子,则称为一元操作符;没
有儿子的操作符号是叶子,一般是数据扫描节点。
1. PRJT2
关系的“投影”(project)运算,用于选择表达式项的计算;广泛用于查询,排序,函数索
引创建等。
SQL>explain select c1 + c2 from t1;
explain select c1 + c2 from t1;
#NSET2: [6, 1, 0]
#PRJT2: [6, 1, 0]; exp_num(2), is_atom(FALSE)
#CSCN2: [6, 1, 0]; INDEX33555457(T1)
2. NSET2
结果集(result set)收集,一般是查询计划的顶层节点。
SQL>explain select c1 + c2 from t1;
explain select c1 + c2 from t1;
#NSET2: [6, 1, 0]
#PRJT2: [6, 1, 0]; exp_num(2), is_atom(FALSE)
#CSCN2: [6, 1, 0]; INDEX33555457(T1)
3. SLCT2
关系的“选择”(select)运算,用于查询条件的过滤。
explain select * from t1 where c1 >1;
#NSET2: [6, 1, 0]
#PRJT2: [6, 1, 0]; exp_num(3), is_atom(FALSE)
#SLCT2: [6, 1, 0]; T1.C1 > 1
#CSCN2: [6, 1, 0]; INDEX33555457(T1)
4. NEST LOOP INNER JOIN2
简写为 NLI2,嵌套循环内连接;没有索引可用,且无法用 HASH,(如不等值比较),则可
能使用 NLI2
explain select * from t1, t2 where t1.c1 >t2.c2;
#NSET2: [19, 1, 0]
#PRJT2: [19, 1, 0]; exp_num(4), is_atom(FALSE)
#SLCT2: [19, 1, 0]; T1.C1 > T2.C2
#NEST LOOP INNER JOIN2: [19, 1, 0];
#CSCN2: [6, 1, 0]; INDEX33555457(T1)
#CSCN2: [6, 1, 0]; INDEX33555458(T2)
5. MERGE INNER JOIN3
简写为 MI3,归并内连接;有索引可用时,有可能使用 MI3。
explain select a.c1, b.c1 from tx a, tx b where a.c1 = b.c1;
#NSET2: [29, 100000, 0]
#PRJT2: [29, 100000, 0]; exp_num(2), is_atom(FALSE)
#MERGE INNER JOIN3: [29, 100000, 0];
#CSCN2: [23, 100000, 0]; INDEX33555463(TX)
#CSCN2: [23, 100000, 0]; INDEX33555463(TX)
6. NEST LOOP FULL JOIN2
简写为 NLFO2,嵌套循环全外连接。一般不等值连接时使用。
explain select *from t1 full join t2 on t1.c1 <> t2.c1;
#NSET2: [19, 1, 0]
#PRJT2: [19, 1, 0]; exp_num(4), is_atom(FALSE)
#NEST LOOP FULL JOIN2: [19, 1, 0]; join condition(T1.C1 <> T2.C1)
#CSCN2: [6, 1, 0]; INDEX33555457(T1)
#CSCN2: [6, 1, 0]; INDEX33555458(T2)
7. NEST LOOP LEFT JOIN2
简写为 NLLO2,嵌套循环左外连接。一般不等值连接时使用。
explain select *from t1 left join t2 on t1.c1 <> t2.c1;
#NSET2: [19, 1, 0]
#PRJT2: [19, 1, 0]; exp_num(4), is_atom(FALSE)
#NEST LOOP LEFT JOIN2: [19, 1, 0]; join condition(T1.C1 <> T2.C1)
#CSCN2: [6, 1, 0]; INDEX33555457(T1)
#CSCN2: [6, 1, 0]; INDEX33555458(T2)
8. HASH LEFT JOIN2
简写为 HLO2,HASH 左外连接。一般等值连接时使用。
explain select *from t1 left join t2 on t1.c1 = t2.c1;
#NSET2: [13, 1, 0]
#PRJT2: [13, 1, 0]; exp_num(4), is_atom(FALSE)
#HASH LEFT JOIN2: [13, 1, 0]; key_num(1),
#CSCN2: [6, 1, 0]; INDEX33555457(T1)
#CSCN2: [6, 1, 0]; INDEX33555458(T2)
9. HASH RIGHT JOIN2
简写为 HRO2,HASH 右外连接。下面的例子,做一个 tx 与 t2 的左连接。因为 t2 的行数
很小,tx 比较大,所以自动转为右连接,在 t2 上建 hash 的代价比较小。
explain select * from tx left join t2 on t2.c1 = tx.c1 + 2;
#NSET2: [39, 100000, 0]
#PRJT2: [39, 100000, 0]; exp_num(4), is_atom(FALSE)
#HASH RIGHT JOIN2: [39, 100000, 0]; key_num(1),
#CSCN2: [6, 1, 0]; INDEX33555458(T2)
#CSCN2: [23, 100000, 0]; INDEX33555463(TX)
10. HASH FULL JOIN2
简写为 HFO2,HASH 全外连接。等值连接时可用;
explain select *from t1 full join t2 on t1.c1 = t2.c1;
#NSET2: [13, 1, 0]
#PRJT2: [13, 1, 0]; exp_num(4), is_atom(FALSE)
#HASH FULL JOIN2: [13, 1, 0]; key_num(1),
#CSCN2: [6, 1, 0]; INDEX33555457(T1)
#CSCN2: [6, 1, 0]; INDEX33555458(T2)
剩余18页未读,继续阅读
资源评论
- 哥从来不玩真三2015-10-16一般般,没什么用
sohay1984
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功