注册

为什么执行计划没有按hint指示执行,而是选择了一个不合理的执行计划

广州-老虎刘 2024/10/15 482 6

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:rhel linux
【CPU】:
【问题描述】*:
--不使用hint, 执行计划是正常的:
select a.owner,b.owner
from t1 a inner join t10m b
on a.object_id=b.object_id
where a.object_name='TAB$';

1 #NSET2: [1, 148->138, 204]
2 #PRJT2: [1, 148->138, 204]; exp_num(2), is_atom(FALSE)
3 #NEST LOOP INDEX JOIN2: [1, 148->138, 204]
4 #BLKUP2: [1, 1->1, 126]; IDX_T1_NAME(T1)
5 #SSEK2: [1, 1->1, 126]; scan_type(ASC), IDX_T1_NAME(T1), is_global(0), scan_range['TAB$','TAB$']
6 #BLKUP2: [1, 137->138, 30]; IDX_T10M_OBJECT_ID(T10M)
7 #SSEK2: [1, 137->138, 30]; scan_type(ASC), IDX_T10M_OBJECT_ID(T10M), is_global(0), scan_range[A.OBJECT_ID,A.OBJECT_ID]

--使用了hint, 没有使用对应的索引, 反而执行计划更差,这是为什么?
select /*+use_nl(a,b) index(b IDX_T10m_OBJECT_ID) */
a.owner,b.owner
from t1 a inner join t10m b on a.object_id=b.object_id
where a.object_name='TAB$';

1 #NSET2: [37302, 149->138, 204]
2 #PRJT2: [37302, 149->138, 204]; exp_num(2), is_atom(FALSE)
3 #SLCT2: [37302, 149->138, 204]; A.OBJECT_ID = B.OBJECT_ID
4 #NEST LOOP INNER JOIN2: [37302, 149->10000000, 204];
5 #BLKUP2: [1, 1->1, 126]; IDX_T1_NAME(T1)
6 #SSEK2: [1, 1->1, 126]; scan_type(ASC), IDX_T1_NAME(T1), is_global(0), scan_range['TAB$','TAB$']
7 #CSCN2: [1208, 10000000->10000000, 78]; INDEX33555591(T10M); btr_scan(1)

回答 0
暂无回答
扫一扫
联系客服