哈希连接与索引
连接条件的索引对哈希连接和排序合并连接起不到传递作用,对于哈希连接和排序合并连接来说,索引的连接条件建立索引起不到快速检索的作用,但是限制条件列如果有适合的索引可以快速检索到少量记录,还是可以提升性能的。
两表关联等值查询,ORACLE一般倾向于走HASH连接,因为HASH连接算法本身比较高效,也比较先进。优化HASH连接可以通过调整PGA中的HASH_AREA_SIZE来优化,如果PGA是自动管理的,那么就增大PGA的大小。
排序合并连接与索引
排序合并连接上的连接条件虽然没有检索作用,但是有消除排序的作用,因此可以提高效率。
SQL>select /*+ordered use_merge(t2)*/
*
from t1, t2
where t1.id = t2.t1_id;
SQL>select * from table(dbms_xplan.display_cursor(null, null, 'allstats last'));
create index idx_t1 on t1(id);
create index idx_t1_id on t2(t1_id); -- 上面建立过
SQL>select /*+ordered use_merge(t2)*/
*
from t1, t2
where t1.id = t2.t1_id;
SQL>select * from table(dbms_xplan.display_cursor(null, null, 'allstats last'));
建了两个索引,最终只用到了一个,这是ORACLE排序合并连接的BUG,在11G官方文档里有承认。
也可以通过增大PGA,优化排序合并连接