(散列)哈希连接(Hash Join (HJ))
假如有A、B两张表进行哈希连接,那么ORACLE会首先将B表在内存中建立一棵以散列表形式存在的查询二叉树C,然后开始读取A表的第一条记录,从C中去找匹配的记录,如果有,则推到结果集中。再提取A中的第二条记录,如果有,则推到结果集中,以此类推,直到A中没有记录,返回结果集。
HasH Join:1个班的同学选舞伴,男班人数和女班人数差不多,放任男班或者女班的人去一个一个的选,这样太浪费时候,不如男班和女班各自集合起来,然后2个班级集合后选。可以这样的理解。
今天就讨论下,Hash Join的连接方式。
所以可以这样理解:驱动表被访问0或者1次,被驱动表也是被访问0次或者1次,绝大部分场景是驱动表和被驱动表被各访问1次),回头再和大家讨论下,hash join 里面驱动顺序、使用限制等问题。
set linesize 1000
SELECT /*+ leading(t2) use_hash(t1)*/ * FROM t1, t2 WHERE t1.id = t2.t1_id and t1.n=19;
select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));