oracle優化之表連線方式

2022-07-11 16:42:13 字數 2278 閱讀 9080

1、表連線型別:

nested loops join

hash join

merge sort join

2、表連線的知識點:

表訪問次數、表驅動順序,是否排序,使用限制。

nested loops join:驅動表被訪問0次或1次,被驅動表訪問0次或n次,n由驅動表返回的結果集的條數來定。

與驅動順序有關

無排序無使用限制

hash join    :訪問次數:1次或0次

與驅動順序有關

無排序(耗記憶體)

不支援 >     等  

merge sort join  :訪問次數:1次或0次

與驅動順序無關

有排序支援 >     等

3、 訪問次數

create

table

m1 (

id number

notnull,n

number

,content

varchar(4000))

create

table

m2 (

id number

notnull

,t1_id

number

notnull,n

number

,content

varchar(4000))

insert

into

m1select rownum,rownum,dbms_random.string('

a',50

)from dual connect by

level

<=

100order

bydbms_random.random;

insert

into

m2select rownum,rownum,rownum,dbms_random.string('

a',50

)from dual connect by

level

<=

100000

order

bydbms_random.random;

select

*from m1,m2 where m1.id=

m2.t1_id;

select

/*+ gather_plan_statistics */*

from m1,m2 where m1.id=

m2.t1_id;

select

/*+ leading(m1) use_nl(m2)*/*

from m1,m2 where m1.id=

m2.t1_id;

select

/*+ leading(m1) use_nl(m2)*/*

from m1,m2 where m1.id=m2.t1_id and m1.n in('

2','

18',30

);select

/*+ leading(m1) use_hash(m2) */*

from m1,m2 where m1.id=m2.t1_id

4、nested loops join 優化

1)確保在olto場景:在大量訪問,且每個訪問的最終返回的記錄很少的場景。

2)驅動表的限制條件要考慮建立索引:

select /*+ leading(m1) use_nl(m2)*/ * from m1,m2 where m1.id=m2.t1_id and m1.n in('2','18',30);

可以建m1表的字段n為索引段,建m2表的字段t1_id為索引段

3)確保小結果集先驅動,大的被驅動。

4)統計資訊收集不準確引發效能瓶頸,預估返回1條,實際返回477k條,預估不準確導致使用nl連線。

5、hash join優化

1)確保用在全掃瞄的olap場景:最終返回的結果記錄比較多

2)明確連線條件是否限制了hash join

3)兩表無任何索引傾向hash join

4)兩表限制條件有索引(看返回量)

5、merge sort join優化

1)確保用在全掃瞄的olap場景:最終返回的結果記錄比較多

2)明確連線條件是否限制了hash join。支援 >     等

3)兩表限制條件有索引(看返回量)

4)避免取多餘列致排序的尺寸太大

Oracle表連線方式之等值連線 外部連線

oracle 8i,9i 表連線方法。一般的相等連線 select from a,b where a.id b.id 這個就屬於內連線。對於外連線 oracle中可以使用 來表示,9i可以使用left right full outer join left outer join 左外關聯 select...

Oracle表連線方式

實用記憶方法 在哪邊,哪邊就是外來鍵,該錶的資料就 少 無 那邊檢索的就是全表資料。oracle 8i,9i 表連線方法。一般的相等連線 select from a,b where a.id b.id 這個就屬於內連線。對於外連線 oracle中可以使用 來表示,9i可以使用left right f...

oracle 表連線方式

一 連線方式 巢狀迴圈 nested loops nl 雜湊 雜湊連線 hash join hj 歸併 排序合併連線 sort merge join smj 二 連線說明 1.oracle一次只能連線兩個表。不管查詢中有多少個表,oracletable 和內部表 inner table 在巢狀迴圈連...