复制
-- 内连接(哈希内连接)SQL> explain SELECT d.*, e.* FROM dept d JOIN emp e ON d.dept_id = e.dept_id WHERE e.emp_id = 111;1 #NSET2: [1, 1, 277]2 #PRJT2: [1, 1, 277]; exp_num(8), is_atom(FALSE)3 #HASH2 INNER JOIN: [1, 1, 277]; RKEY_UNIQUE KEY_NUM(1); KEY(E.DEPT_ID=D.DEPT_ID) KEY_NULL_EQU(0)4 #NEST LOOP INDEX JOIN2: [1, 1, 277]5 #ACTRL: [1, 1, 277]6 #BLKUP2: [1, 1, 151]; INDEX33555485(E)7 #SSEK2: [1, 1, 151]; scan_type(ASC), INDEX33555485(EMP as E), scan_range[exp_cast(111),exp_cast(111)], is_global(0)8 #BLKUP2: [1, 1, 30]; INDEX33555481(D)9 #SSEK2: [1, 1, 30]; scan_type(ASC), INDEX33555481(DEPT as D), scan_range[E.DEPT_ID,E.DEPT_ID], is_global(0)10 #CSCN2: [1, 100, 126]; INDEX33555480(DEPT as D); btr_scan(1)-- 内连接(哈希内连接)SQL> explain SELECT d.*, e.* FROM dept d JOIN emp e ON d.dept_id = e.dept_id;1 #NSET2: [3, 10000, 277]2 #PRJT2: [3, 10000, 277]; exp_num(8), is_atom(FALSE)3 #HASH2 INNER JOIN: [3, 10000, 277]; LKEY_UNIQUE KEY_NUM(1); KEY(D.DEPT_ID=E.DEPT_ID) KEY_NULL_EQU(0)4 #CSCN2: [1, 100, 126]; INDEX33555480(DEPT as D); btr_scan(1)5 #CSCN2: [1, 10000, 151]; INDEX33555484(EMP as E); btr_scan(1)-- 内连接(哈希内连接)SQL> explain SELECT d.dept_name, e.emp_name FROM dept d JOIN emp e ON d.dept_id = e.dept_id;1 #NSET2: [2, 10000, 156]2 #PRJT2: [2, 10000, 156]; exp_num(2), is_atom(FALSE)3 #HASH2 INNER JOIN: [2, 10000, 156]; LKEY_UNIQUE KEY_NUM(1); KEY(D.DEPT_ID=E.DEPT_ID) KEY_NULL_EQU(0)4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)-- 左外连接(哈希外连接)SQL> explain select e.emp_name,d.dept_name from emp e left outer join dept d on e.dept_id=d.dept_id;1 #NSET2: [2, 10000, 78]2 #PRJT2: [2, 10000, 78]; exp_num(2), is_atom(FALSE)3 #HASH RIGHT JOIN2: [2, 10000, 78]; key_num(1), ret_null(0), KEY(D.DEPT_ID=E.DEPT_ID)4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)-- 全外连接(哈希全连接)SQL> explain select e.emp_name,d.dept_name from emp e full outer join dept d on e.dept_id=d.dept_id;1 #NSET2: [2, 10000, 78]2 #PRJT2: [2, 10000, 78]; exp_num(2), is_atom(FALSE)3 #HASH FULL JOIN2: [2, 10000, 78]; key_num(1), mix_aagr(0), mix_dist(0) KEY(D.DEPT_ID=E.DEPT_ID)4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)-- 半连接(哈希半连接)SQL> explain select * from dept where dept_id in (select dept_id from emp where salary>1500);1 #NSET2: [2, 100, 138]2 #PRJT2: [2, 100, 138]; exp_num(4), is_atom(FALSE)3 #HASH LEFT SEMI JOIN2: [2, 100, 138]; KEY_NUM(1); KEY(DEPT.DEPT_ID=EMP.DEPT_ID) KEY_NULL_EQU(0)4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)5 #SLCT2: [1, 4457, 60]; EMP.SALARY > var16 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)-- 反连接(哈希半连接)SQL> explain select * from dept where dept_id not in (select dept_id from emp where salary>1500);1 #NSET2: [2, 1, 138]2 #PRJT2: [2, 1, 138]; exp_num(4), is_atom(FALSE)3 #HASH LEFT SEMI JOIN2: [2, 1, 138]; (ANTI),KEY_NUM(1); KEY(DEPT.DEPT_ID=DMTEMPVIEW_889193480.colname) KEY_NULL_EQU(0)4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)5 #PRJT2: [1, 4457, 60]; exp_num(1), is_atom(FALSE)6 #SLCT2: [1, 4457, 60]; EMP.SALARY > var17 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)SQL> alter table emp modify dept_id null;SQL> explain select * from dept where dept_id not in (select dept_id from emp where salary>1500);1 #NSET2: [2, 1, 138]2 #PRJT2: [2, 1, 138]; exp_num(4), is_atom(FALSE)3 #HASH LEFT SEMI JOIN2: [2, 1, 138]; (ANTI),KEY_NUM(1); KEY(DEPT.DEPT_ID=DMTEMPVIEW_889193500.colname) KEY_NULL_EQU(0)4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)5 #PRJT2: [1, 4457, 60]; exp_num(1), is_atom(FALSE)6 #SLCT2: [1, 4457, 60]; EMP.SALARY > var17 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1) explain SELECT d.*, e.* FROM dept d JOIN emp e ON d.dept_id = e.dept_id WHERE e.emp_id = 111;\n1 #NSET2: [1, 1, 277]\n2 #PRJT2: [1, 1, 277]; exp_num(8), is_atom(FALSE)\n3 #HASH2 INNER JOIN: [1, 1, 277]; RKEY_UNIQUE KEY_NUM(1); KEY(E.DEPT_ID=D.DEPT_ID) KEY_NULL_EQU(0)\n4 #NEST LOOP INDEX JOIN2: [1, 1, 277]\n5 #ACTRL: [1, 1, 277]\n6 #BLKUP2: [1, 1, 151]; INDEX33555485(E)\n7 #SSEK2: [1, 1, 151]; scan_type(ASC), INDEX33555485(EMP as E), scan_range[exp_cast(111),exp_cast(111)], is_global(0)\n8 #BLKUP2: [1, 1, 30]; INDEX33555481(D)\n9 #SSEK2: [1, 1, 30]; scan_type(ASC), INDEX33555481(DEPT as D), scan_range[E.DEPT_ID,E.DEPT_ID], is_global(0)\n10 #CSCN2: [1, 100, 126]; INDEX33555480(DEPT as D); btr_scan(1)\n\n-- 内连接(哈希内连接)\nSQL> explain SELECT d.*, e.* FROM dept d JOIN emp e ON d.dept_id = e.dept_id;\n1 #NSET2: [3, 10000, 277]\n2 #PRJT2: [3, 10000, 277]; exp_num(8), is_atom(FALSE)\n3 #HASH2 INNER JOIN: [3, 10000, 277]; LKEY_UNIQUE KEY_NUM(1); KEY(D.DEPT_ID=E.DEPT_ID) KEY_NULL_EQU(0)\n4 #CSCN2: [1, 100, 126]; INDEX33555480(DEPT as D); btr_scan(1)\n5 #CSCN2: [1, 10000, 151]; INDEX33555484(EMP as E); btr_scan(1)\n\n-- 内连接(哈希内连接)\nSQL> explain SELECT d.dept_name, e.emp_name FROM dept d JOIN emp e ON d.dept_id = e.dept_id;\n1 #NSET2: [2, 10000, 156]\n2 #PRJT2: [2, 10000, 156]; exp_num(2), is_atom(FALSE)\n3 #HASH2 INNER JOIN: [2, 10000, 156]; LKEY_UNIQUE KEY_NUM(1); KEY(D.DEPT_ID=E.DEPT_ID) KEY_NULL_EQU(0)\n4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)\n5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)\n\n-- 左外连接(哈希外连接)\nSQL> explain select e.emp_name,d.dept_name from emp e left outer join dept d on e.dept_id=d.dept_id;\n1 #NSET2: [2, 10000, 78]\n2 #PRJT2: [2, 10000, 78]; exp_num(2), is_atom(FALSE)\n3 #HASH RIGHT JOIN2: [2, 10000, 78]; key_num(1), ret_null(0), KEY(D.DEPT_ID=E.DEPT_ID)\n4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)\n5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)\n\n-- 全外连接(哈希全连接)\nSQL> explain select e.emp_name,d.dept_name from emp e full outer join dept d on e.dept_id=d.dept_id;\n1 #NSET2: [2, 10000, 78]\n2 #PRJT2: [2, 10000, 78]; exp_num(2), is_atom(FALSE)\n3 #HASH FULL JOIN2: [2, 10000, 78]; key_num(1), mix_aagr(0), mix_dist(0) KEY(D.DEPT_ID=E.DEPT_ID)\n4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)\n5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)\n\n-- 半连接(哈希半连接)\nSQL> explain select * from dept where dept_id in (select dept_id from emp where salary>1500);\n1 #NSET2: [2, 100, 138]\n2 #PRJT2: [2, 100, 138]; exp_num(4), is_atom(FALSE)\n3 #HASH LEFT SEMI JOIN2: [2, 100, 138]; KEY_NUM(1); KEY(DEPT.DEPT_ID=EMP.DEPT_ID) KEY_NULL_EQU(0)\n4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)\n5 #SLCT2: [1, 4457, 60]; EMP.SALARY > var1\n6 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)\n\n-- 反连接(哈希半连接)\nSQL> explain select * from dept where dept_id not in (select dept_id from emp where salary>1500);\n1 #NSET2: [2, 1, 138]\n2 #PRJT2: [2, 1, 138]; exp_num(4), is_atom(FALSE)\n3 #HASH LEFT SEMI JOIN2: [2, 1, 138]; (ANTI),KEY_NUM(1); KEY(DEPT.DEPT_ID=DMTEMPVIEW_889193480.colname) KEY_NULL_EQU(0)\n4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)\n5 #PRJT2: [1, 4457, 60]; exp_num(1), is_atom(FALSE)\n6 #SLCT2: [1, 4457, 60]; EMP.SALARY > var1\n7 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)\n\nSQL> alter table emp modify dept_id null;\nSQL> explain select * from dept where dept_id not in (select dept_id from emp where salary>1500);\n1 #NSET2: [2, 1, 138]\n2 #PRJT2: [2, 1, 138]; exp_num(4), is_atom(FALSE)\n3 #HASH LEFT SEMI JOIN2: [2, 1, 138]; (ANTI),KEY_NUM(1); KEY(DEPT.DEPT_ID=DMTEMPVIEW_889193500.colname) KEY_NULL_EQU(0)\n4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)\n5 #PRJT2: [1, 4457, 60]; exp_num(1), is_atom(FALSE)\n6 #SLCT2: [1, 4457, 60]; EMP.SALARY > var1\n7 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)"},"attribs":{"0":"*0|20+36u*0+1x"}},"apool":{"numToAttrib":{"0":["author","6932737685563949084"]},"nextNum":1}},"type":"text","referenceRecordMap":{},"extra":{"channel":"saas","pasteRandomId":"df6be6fe-6a56-48d4-83bf-739868cbc368","mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":true,"selection":[{"id":61,"type":"text","selection":{"start":0,"end":4203},"recordId":"doxcn4W1kJhADcDV9mWqfWENMvf"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text" class=""> explain select * from emp;\n1 #NSET2: [1, 10000, 163]\n2 #PRJT2: [1, 10000, 163]; exp_num(6), is_atom(FALSE)\n3 #CSCN2: [1, 10000, 163]; INDEX33555484(EMP); btr_scan(1)\n\n-- 索引扫描:索引唯一扫描\nSQL> explain select * from emp where emp_id=111;\n1 #NSET2: [1, 1, 163]\n2 #PRJT2: [1, 1, 163]; exp_num(6), is_atom(FALSE)\n3 #BLKUP2: [1, 1, 163]; INDEX33555485(EMP)\n4 #SSEK2: [1, 1, 163]; scan_type(ASC), INDEX33555485(EMP), scan_range[exp_cast(111),exp_cast(111)], is_global(0)\n* 没有唯一扫描方式,DM都认为是范围扫描\n\n-- 索引扫描:索引范围扫描\nSQL> explain select * from emp where emp_idexplain select emp_name from emp;\n1 #NSET2: [1, 10000, 60]\n2 #PRJT2: [1, 10000, 60]; exp_num(2), is_atom(FALSE)\n3 #SSCN: [1, 10000, 60]; IDX_EMP_NAME(EMP); btr_scan(1); is_global(0)\n* 直接使用索引扫描,不用再回表查\n\n-- 索引扫描:索引跳跃扫描(index skip scan)\nSQL> create table t as select 1 id,object_name from dba_objects;\nSQL> insert into t select 2 ,object_name from dba_objects;\nSQL> insert into t select 3 ,object_name from dba_objects;\nSQL> insert into t select 4 ,object_name from dba_objects;\nSQL> create index idx_t on t(id,object_name);\nSQL> CALL SP_TAB_INDEX_STAT_INIT (TESTUSER, T);\nSQL> explain select * from t where object_name=TEST;\n1 #NSET2: [1, 109, 64]\n2 #PRJT2: [1, 109, 64]; exp_num(3), is_atom(FALSE)\n3 #SLCT2: [1, 109, 64]; T.OBJECT_NAME = TEST\n4 #SSCN: [1, 109, 64]; IDX_T(T); btr_scan(1); is_global(0)\n* 直接使用索引扫描,实现了跳跃扫描功能"},"attribs":{"0":"*0|15+1bt*0+k"}},"apool":{"numToAttrib":{"0":["author","6932737685563949084"]},"nextNum":1}},"type":"text","referenceRecordMap":{},"extra":{"channel":"saas","pasteRandomId":"0a35004b-6907-4360-87a7-21f2865d269f","mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":true,"selection":[{"id":61,"type":"text","selection":{"start":0,"end":1741},"recordId":"OryBdxBRuos3ynxXOlrc0OEFnbd"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text" class="">
-- 内连接(哈希内连接)SQL> explain SELECT d.*, e.* FROM dept d JOIN emp e ON d.dept_id = e.dept_id WHERE e.emp_id = 111;1 #NSET2: [1, 1, 277]2 #PRJT2: [1, 1, 277]; exp_num(8), is_atom(FALSE)3 #HASH2 INNER JOIN: [1, 1, 277]; RKEY_UNIQUE KEY_NUM(1); KEY(E.DEPT_ID=D.DEPT_ID) KEY_NULL_EQU(0)4 #NEST LOOP INDEX JOIN2: [1, 1, 277]5 #ACTRL: [1, 1, 277]6 #BLKUP2: [1, 1, 151]; INDEX33555485(E)7 #SSEK2: [1, 1, 151]; scan_type(ASC), INDEX33555485(EMP as E), scan_range[exp_cast(111),exp_cast(111)], is_global(0)8 #BLKUP2: [1, 1, 30]; INDEX33555481(D)9 #SSEK2: [1, 1, 30]; scan_type(ASC), INDEX33555481(DEPT as D), scan_range[E.DEPT_ID,E.DEPT_ID], is_global(0)10 #CSCN2: [1, 100, 126]; INDEX33555480(DEPT as D); btr_scan(1)-- 内连接(哈希内连接)SQL> explain SELECT d.*, e.* FROM dept d JOIN emp e ON d.dept_id = e.dept_id;1 #NSET2: [3, 10000, 277]2 #PRJT2: [3, 10000, 277]; exp_num(8), is_atom(FALSE)3 #HASH2 INNER JOIN: [3, 10000, 277]; LKEY_UNIQUE KEY_NUM(1); KEY(D.DEPT_ID=E.DEPT_ID) KEY_NULL_EQU(0)4 #CSCN2: [1, 100, 126]; INDEX33555480(DEPT as D); btr_scan(1)5 #CSCN2: [1, 10000, 151]; INDEX33555484(EMP as E); btr_scan(1)-- 内连接(哈希内连接)SQL> explain SELECT d.dept_name, e.emp_name FROM dept d JOIN emp e ON d.dept_id = e.dept_id;1 #NSET2: [2, 10000, 156]2 #PRJT2: [2, 10000, 156]; exp_num(2), is_atom(FALSE)3 #HASH2 INNER JOIN: [2, 10000, 156]; LKEY_UNIQUE KEY_NUM(1); KEY(D.DEPT_ID=E.DEPT_ID) KEY_NULL_EQU(0)4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)-- 左外连接(哈希外连接)SQL> explain select e.emp_name,d.dept_name from emp e left outer join dept d on e.dept_id=d.dept_id;1 #NSET2: [2, 10000, 78]2 #PRJT2: [2, 10000, 78]; exp_num(2), is_atom(FALSE)3 #HASH RIGHT JOIN2: [2, 10000, 78]; key_num(1), ret_null(0), KEY(D.DEPT_ID=E.DEPT_ID)4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)-- 全外连接(哈希全连接)SQL> explain select e.emp_name,d.dept_name from emp e full outer join dept d on e.dept_id=d.dept_id;1 #NSET2: [2, 10000, 78]2 #PRJT2: [2, 10000, 78]; exp_num(2), is_atom(FALSE)3 #HASH FULL JOIN2: [2, 10000, 78]; key_num(1), mix_aagr(0), mix_dist(0) KEY(D.DEPT_ID=E.DEPT_ID)4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)-- 半连接(哈希半连接)SQL> explain select * from dept where dept_id in (select dept_id from emp where salary>1500);1 #NSET2: [2, 100, 138]2 #PRJT2: [2, 100, 138]; exp_num(4), is_atom(FALSE)3 #HASH LEFT SEMI JOIN2: [2, 100, 138]; KEY_NUM(1); KEY(DEPT.DEPT_ID=EMP.DEPT_ID) KEY_NULL_EQU(0)4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)5 #SLCT2: [1, 4457, 60]; EMP.SALARY > var16 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)-- 反连接(哈希半连接)SQL> explain select * from dept where dept_id not in (select dept_id from emp where salary>1500);1 #NSET2: [2, 1, 138]2 #PRJT2: [2, 1, 138]; exp_num(4), is_atom(FALSE)3 #HASH LEFT SEMI JOIN2: [2, 1, 138]; (ANTI),KEY_NUM(1); KEY(DEPT.DEPT_ID=DMTEMPVIEW_889193480.colname) KEY_NULL_EQU(0)4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)5 #PRJT2: [1, 4457, 60]; exp_num(1), is_atom(FALSE)6 #SLCT2: [1, 4457, 60]; EMP.SALARY > var17 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)SQL> alter table emp modify dept_id null;SQL> explain select * from dept where dept_id not in (select dept_id from emp where salary>1500);1 #NSET2: [2, 1, 138]2 #PRJT2: [2, 1, 138]; exp_num(4), is_atom(FALSE)3 #HASH LEFT SEMI JOIN2: [2, 1, 138]; (ANTI),KEY_NUM(1); KEY(DEPT.DEPT_ID=DMTEMPVIEW_889193500.colname) KEY_NULL_EQU(0)4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)5 #PRJT2: [1, 4457, 60]; exp_num(1), is_atom(FALSE)6 #SLCT2: [1, 4457, 60]; EMP.SALARY > var17 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1) explain SELECT d.*, e.* FROM dept d JOIN emp e ON d.dept_id = e.dept_id WHERE e.emp_id = 111;\n1 #NSET2: [1, 1, 277]\n2 #PRJT2: [1, 1, 277]; exp_num(8), is_atom(FALSE)\n3 #HASH2 INNER JOIN: [1, 1, 277]; RKEY_UNIQUE KEY_NUM(1); KEY(E.DEPT_ID=D.DEPT_ID) KEY_NULL_EQU(0)\n4 #NEST LOOP INDEX JOIN2: [1, 1, 277]\n5 #ACTRL: [1, 1, 277]\n6 #BLKUP2: [1, 1, 151]; INDEX33555485(E)\n7 #SSEK2: [1, 1, 151]; scan_type(ASC), INDEX33555485(EMP as E), scan_range[exp_cast(111),exp_cast(111)], is_global(0)\n8 #BLKUP2: [1, 1, 30]; INDEX33555481(D)\n9 #SSEK2: [1, 1, 30]; scan_type(ASC), INDEX33555481(DEPT as D), scan_range[E.DEPT_ID,E.DEPT_ID], is_global(0)\n10 #CSCN2: [1, 100, 126]; INDEX33555480(DEPT as D); btr_scan(1)\n\n-- 内连接(哈希内连接)\nSQL> explain SELECT d.*, e.* FROM dept d JOIN emp e ON d.dept_id = e.dept_id;\n1 #NSET2: [3, 10000, 277]\n2 #PRJT2: [3, 10000, 277]; exp_num(8), is_atom(FALSE)\n3 #HASH2 INNER JOIN: [3, 10000, 277]; LKEY_UNIQUE KEY_NUM(1); KEY(D.DEPT_ID=E.DEPT_ID) KEY_NULL_EQU(0)\n4 #CSCN2: [1, 100, 126]; INDEX33555480(DEPT as D); btr_scan(1)\n5 #CSCN2: [1, 10000, 151]; INDEX33555484(EMP as E); btr_scan(1)\n\n-- 内连接(哈希内连接)\nSQL> explain SELECT d.dept_name, e.emp_name FROM dept d JOIN emp e ON d.dept_id = e.dept_id;\n1 #NSET2: [2, 10000, 156]\n2 #PRJT2: [2, 10000, 156]; exp_num(2), is_atom(FALSE)\n3 #HASH2 INNER JOIN: [2, 10000, 156]; LKEY_UNIQUE KEY_NUM(1); KEY(D.DEPT_ID=E.DEPT_ID) KEY_NULL_EQU(0)\n4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)\n5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)\n\n-- 左外连接(哈希外连接)\nSQL> explain select e.emp_name,d.dept_name from emp e left outer join dept d on e.dept_id=d.dept_id;\n1 #NSET2: [2, 10000, 78]\n2 #PRJT2: [2, 10000, 78]; exp_num(2), is_atom(FALSE)\n3 #HASH RIGHT JOIN2: [2, 10000, 78]; key_num(1), ret_null(0), KEY(D.DEPT_ID=E.DEPT_ID)\n4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)\n5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)\n\n-- 全外连接(哈希全连接)\nSQL> explain select e.emp_name,d.dept_name from emp e full outer join dept d on e.dept_id=d.dept_id;\n1 #NSET2: [2, 10000, 78]\n2 #PRJT2: [2, 10000, 78]; exp_num(2), is_atom(FALSE)\n3 #HASH FULL JOIN2: [2, 10000, 78]; key_num(1), mix_aagr(0), mix_dist(0) KEY(D.DEPT_ID=E.DEPT_ID)\n4 #CSCN2: [1, 100, 78]; INDEX33555480(DEPT as D); btr_scan(1)\n5 #CSCN2: [1, 10000, 78]; INDEX33555484(EMP as E); btr_scan(1)\n\n-- 半连接(哈希半连接)\nSQL> explain select * from dept where dept_id in (select dept_id from emp where salary>1500);\n1 #NSET2: [2, 100, 138]\n2 #PRJT2: [2, 100, 138]; exp_num(4), is_atom(FALSE)\n3 #HASH LEFT SEMI JOIN2: [2, 100, 138]; KEY_NUM(1); KEY(DEPT.DEPT_ID=EMP.DEPT_ID) KEY_NULL_EQU(0)\n4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)\n5 #SLCT2: [1, 4457, 60]; EMP.SALARY > var1\n6 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)\n\n-- 反连接(哈希半连接)\nSQL> explain select * from dept where dept_id not in (select dept_id from emp where salary>1500);\n1 #NSET2: [2, 1, 138]\n2 #PRJT2: [2, 1, 138]; exp_num(4), is_atom(FALSE)\n3 #HASH LEFT SEMI JOIN2: [2, 1, 138]; (ANTI),KEY_NUM(1); KEY(DEPT.DEPT_ID=DMTEMPVIEW_889193480.colname) KEY_NULL_EQU(0)\n4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)\n5 #PRJT2: [1, 4457, 60]; exp_num(1), is_atom(FALSE)\n6 #SLCT2: [1, 4457, 60]; EMP.SALARY > var1\n7 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)\n\nSQL> alter table emp modify dept_id null;\nSQL> explain select * from dept where dept_id not in (select dept_id from emp where salary>1500);\n1 #NSET2: [2, 1, 138]\n2 #PRJT2: [2, 1, 138]; exp_num(4), is_atom(FALSE)\n3 #HASH LEFT SEMI JOIN2: [2, 1, 138]; (ANTI),KEY_NUM(1); KEY(DEPT.DEPT_ID=DMTEMPVIEW_889193500.colname) KEY_NULL_EQU(0)\n4 #CSCN2: [1, 100, 138]; INDEX33555480(DEPT); btr_scan(1)\n5 #PRJT2: [1, 4457, 60]; exp_num(1), is_atom(FALSE)\n6 #SLCT2: [1, 4457, 60]; EMP.SALARY > var1\n7 #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)"},"attribs":{"0":"*0|20+36u*0+1x"}},"apool":{"numToAttrib":{"0":["author","6932737685563949084"]},"nextNum":1}},"type":"text","referenceRecordMap":{},"extra":{"channel":"saas","pasteRandomId":"df6be6fe-6a56-48d4-83bf-739868cbc368","mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":true,"selection":[{"id":61,"type":"text","selection":{"start":0,"end":4203},"recordId":"doxcn4W1kJhADcDV9mWqfWENMvf"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text" class="">1.2.