达梦数据库参数理解-【CNNTB_OPT_FLAG】

CNNTB_OPT_FLAG参数,见达梦数据库DBA手册介绍:
在这里插入图片描述
参数默认为0,在一些层次查询比如start with connect by的处理当中会有比较大的影响。
举例说明
DROP TABLE T1;
CREATE TABLE T1(C1 INT, C2 INT);
执行下面的语句,CNNTB_OPT_FLAG 为 0,在执行计划的第 3 行,KEY_NUM(0)表明采
用类似嵌套循环连接的方式实现层次查询。
EXPLAIN SELECT /+ CNNTB_OPT_FLAG(0)/ * FROM T1 CONNECT BY PRIOR C1=C2;
1 #NSET2: [0, 5, 8]
2 #PRJT2: [0, 5, 8]; exp_num(2), is_atom(FALSE)
3 #HIERARCHICAL QUERY: [0, 5, 8]; KEY_NUM(0);
4 #CSCN2: [0, 2, 8]; INDEX33566437(T1)
5 #SLCT2: [0, 1, 8]; T1.C2 = var1
6 #CSCN2: [0, 1, 8]; INDEX33566437(T1)
将 CNNTB_OPT_FLAG 置为 1,执行相同的语句。在执行计划的第 3 行,KEY_NUM(1)
表明采用类似 HASH JOIN 的优化方式,将 C1=C2 作为左右表的连接 KEY。
EXPLAIN SELECT /+ CNNTB_OPT_FLAG(1)/ * FROM T1 CONNECT BY PRIOR C1=C2;
1 #NSET2: [0, 5, 8]
2 #PRJT2: [0, 5, 8]; exp_num(2), is_atom(FALSE)
3 #HIERARCHICAL QUERY: [0, 5, 8]; KEY_NUM(1);
4 #CSCN2: [0, 2, 8]; INDEX33566437(T1)
5 #CSCN2: [0, 2, 8]; INDEX33566437(T1)
在表 T1 的 C2 列上建一个索引。
CREATE INDEX IT1C2 ON T1(C2);
将 CNNTB_OPT_FLAG 置为 1,执行与之前相同的查询语句。由于有可用的索引,因此使
用嵌套循环的方式实现。
EXPLAIN SELECT /+ CNNTB_OPT_FLAG(2)/ * FROM T1 CONNECT BY PRIOR C1=C2;
1 #NSET2: [0, 2, 8]
2 #PRJT2: [0, 2, 8]; exp_num(2), is_atom(FALSE)
3 #HIERARCHICAL QUERY: [0, 2, 8]; KEY_NUM(0);
4 #CSCN2: [0, 1, 8]; INDEX33602469(T1)
5 #BLKUP2: [0, 1, 8]; IDX_T1_C2(T1)
6 #SSEK2: [0, 1, 8]; scan_type(ASC), IDX_T1_C2(T1),
scan_range[var1,var1]
如果将索引 IT1C2 删除,再执行上面的语句,虽然 CNNTB_OPT_FLAG 仍旧置为 2,执
行计划与置为 1 时一致。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值