Oracle中表链接方式(Nested Loop、Hash join)对于表访问次数的测试

      平时写SQL遇到多表关联的状况常常见到,这也是关系型数据库最大的优点之一。表链接类型能够分为Nested Loops join、hash join、Merge Sort Join三类。每一类都有各自的使用场景,sql语句在数据库中生成执行计划,数据库中优化器会根据代价去判断选择哪一种方式。Merge Sort Join 的表访问次数和 Hash Join 是相似的。下面测试Nested Loop、Hash join这两种方式执行时对于表的访问次数。sql

一、构造测试环境

①建立表test一、test2

SYS@vbox66in>create table test1 (
  2  id number not null,
  3  num number,
  4  val varchar2(100));

表已建立。

SYS@vbox66in>
SYS@vbox66in>create table test2 (
  2  id number not null,
  3  t1_id number not null,
  4  num number,
  5  val varchar2(100));

表已建立。

SYS@vbox66in>

②插入数据

SYS@vbox66in>exec dbms_random.seed(0);

PL/SQL 过程已成功完成。

SYS@vbox66in>insert into test1 
 2     select rownum,rownum,dbms_random.string('a',50) from dual
 3       connect by level <= 100
 4         order by dbms_random.random;

已建立 100 行。

SYS@vbox66in>
SYS@vbox66in>insert into test2
  2    select rownum,rownum,rownum,dbms_random.string('a',50) from dual
  3      connect by level <= 10000
  4        order by dbms_random.random;

已建立 10000 行。

SYS@vbox66in>commit;

提交完成。

SYS@vbox66in>

二、表访问次数测试

①Nested Loops join方式

        Nested Looped join中,驱动表被访问0次或1次,被驱动表被访问0次或N次,N由驱动表返回的结果集条数来决定,下面经过4种状况来测试。数据库

相关文章
相关标签/搜索