注册

sql中使用left join关联查询,为何执行计划里使用的HASH2 INNER JOIN

中年油腻大叔 2025/05/13 184 3

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM Database Server 64 V8
【操作系统】:kylin v10
【CPU】:x86
【问题描述】*:sql中使用left join关联查询,为何执行计划里使用的HASH2 INNER JOIN
问题sql:
select * from (select
CASE
WHEN a1.id = 1 THEN a2.RULE_NAME
WHEN a1.id = 2 THEN a3.ALARM_NAME
ELSE a4.ALARM_NAME END RULE_NAME
from (select 2 as id from dual) a1
left join T_ALARM_NOTICE_CONFIG a2 on a1.id =a2.id
left join T_SYS_RESOURCE_ALARM_RULE a3 on a1.id =a3.id
left join T_CHECK_ACCOUNTS_ALARM_RULE a4 on a1.id =a4.id ) AA WHERE AA.RULE_NAME IS NOT NULL;
执行计划:

1 #NSET2: [1, 1, 235]
2 #PRJT2: [1, 1, 235]; exp_num(1), is_atom(FALSE)
3 #PRJT2: [1, 1, 235]; exp_num(1), is_atom(FALSE)
4 #SLCT2: [1, 1, 235]; NOT(exp_bool_case IS NULL)
5 #HASH2 INNER JOIN: [1, 1, 235]; RKEY_UNIQUE KEY_NUM(1); KEY(exp_cast(A1.ID)=A4.ID) KEY_NULL_EQU(0)
6 #SLCT2: [1, 1, 235]; NOT(exp_bool_case IS NULL)
7 #NEST LOOP INDEX JOIN2: [1, 1, 235]
8 #ACTRL: [1, 1, 235];
9 #HASH2 INNER JOIN: [1, 1, 157]; RKEY_UNIQUE KEY_NUM(1); KEY(exp_cast(A1.ID)=A3.ID) KEY_NULL_EQU(0)
10 #NEST LOOP INDEX JOIN2: [1, 1, 157]
11 #ACTRL: [1, 1, 157];
12 #HASH2 INNER JOIN: [1, 1, 79]; RKEY_UNIQUE KEY_NUM(1); KEY(exp_cast(A1.ID)=A2.ID) KEY_NULL_EQU(0)
13 #NEST LOOP INDEX JOIN2: [1, 1, 79]
14 #ACTRL: [1, 1, 79];
15 #PRJT2: [1, 1, 1]; exp_num(1), is_atom(FALSE)
16 #CSCN2: [1, 1, 1]; SYSINDEXSYSDUAL2(SYSDUAL2 as DUAL)
17 #CSEK2: [1, 1, 0]; scan_type(UNIQUE), INDEX33555487(T_ALARM_NOTICE_CONFIG as A2), scan_range[exp_cast(A1.ID),exp_cast(A1.ID)]
18 #CSCN2: [1, 1, 78]; INDEX33555487(T_ALARM_NOTICE_CONFIG as A2)
19 #CSEK2: [1, 1, 0]; scan_type(UNIQUE), INDEX33555631(T_SYS_RESOURCE_ALARM_RULE as A3), scan_range[exp_cast(A1.ID),exp_cast(A1.ID)]
20 #CSCN2: [1, 3, 78]; INDEX33555631(T_SYS_RESOURCE_ALARM_RULE as A3)
21 #CSEK2: [1, 1, 0]; scan_type(UNIQUE), INDEX33555769(T_CHECK_ACCOUNTS_ALARM_RULE as A4), scan_range[exp_cast(A1.ID),exp_cast(A1.ID)]
22 #CSCN2: [1, 1, 78]; INDEX33555769(T_CHECK_ACCOUNTS_ALARM_RULE as A4)

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