为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8
【操作系统】:Centos 7.6
【CPU】:X86
【问题描述】*:
通过hint方式控制是否使用nest loop join,发现不生效。
具体操作截图如下:
1、控制不使用nest loop join,发现还是使用了nl
2、控制nest loop join的连接顺序,无法更改驱动表
不加hint:t2是驱动表。
SQL> explain select t1.id,t1.n,t2.t1_id from t1 join t2 on t1.id=t2.t1_id and t2.t1_id=2;
1 #NSET2: [12, 1, 90]
2 #PRJT2: [12, 1, 90]; exp_num(3), is_atom(FALSE)
3 #NEST LOOP INNER JOIN2: [12, 1, 90];
4 #SLCT2: [12, 1, 30]; T2.T1_ID = var1
5 #CSCN2: [12, 100000, 30]; INDEX33555543(T2); btr_scan(1)
6 #SLCT2: [1, 1, 60]; T1.ID = var2
7 #CSCN2: [1, 100, 60]; INDEX33555542(T1); btr_scan(1)
已用时间: 0.972(毫秒). 执行号:0.
加hint改变驱动表为t1:发现驱动表还是t2
3、个人理解use_nl(t1,t2)可以通过更改括号里的表的顺序来指定谁是驱动表。不确定这样理解是否正确。
不是强制 ,综合评估CBO代价