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種狀況來測試。數據庫

相關文章
相關標籤/搜索