oracle連線種類整理

2021-07-02 20:51:35 字數 2382 閱讀 1746

oracle多表連線分為三大類:next loop、sort merge、hash join。

每一類又分為三小類,有傳統連線,semi join, anti join。(後兩種叫做半連線)

nest loop方式:

有兩個表,驅動表driving table,被驅動表driven table。

驅動表做一次遍歷,被驅動表做多次遍歷。

返回第一條記錄速度很快,不需要排序。

可以使用非等值連線。

sort merge方式:

兩個表地位一樣。每個表都要先排序,然後進行合併,返回記錄集。

排序首先在記憶體中進行,能在記憶體中完成的叫做optimal sort,也叫in-memory sort。如果需要借助磁碟緩衝,叫做外部排序external sort。

在外部排序中,執行run是指一次對磁碟做io。

如果一次輸入就能完成整個資料集的排序叫做1路排序1-pass sort。需要多次輸入輸出操作的叫多路排序multi-pass sort。

從效能角度來看optimal sort>1-pass sort>multi-pass sort

執行計畫中

omem:代表使用optimal排序需要的記憶體估量。

1mem:代表使用1-pass排序需要的記憶體估量。

o/1/m:代表實際optimal、1-pass、multi-pass方式的執行次數。

hash join方式:

乙個驅動表,乙個被驅動表。過程有兩個階段:

準備階段:對驅動表的連線字段進行雜湊操作,產生一系列的hash bucket(雜湊桶)

探測階段:依次上去被驅動表每條記錄,對連線字段執行相同雜湊函式,和驅動表雜湊桶進行匹配,這個過程叫探測(probe)。

a外連線(

left/right/full outer join)

b內連線(inner join):顯示關聯上的2表都有的資訊,不像外連線偏向顯示某個表全部資料

c自連線

select c1.cno,c1.coursename,c1.pno,c2.coursename  

from courses c1,courses c2 where c1.pno=c2.cno

d自然連線(natural join):指明了兩表進行自然連線,並且連線是基於兩表中所有同名字段的。

selectempno,ename,loc,deptno from emp natural join dept

注意:最好不要使用這種,因為當修改表結構的時候相關的sql也需要修改

e笛卡爾連線(cross join):a*b

f半連線(semi join or 

anti join):

in 與 exists方式的關聯semi join,

類似nest loop方式,對主查詢每條記錄都執行一次子查詢,在執行計畫中叫做filter。

hint:

操作

nest loop

hash join

sort mereg

join

use_nl

use_hash

use_merge

anti join

nl_aj

hash_aj

merge_aj

semi

nl_sj

hash_sj

merge_sj

MySql資料庫連線種類

查詢分析器中執行 建表table1,table2 create table table1 id int,name varchar 10 create table table2 id int,score int insert into table1 select 1,lli insert into t...

c 連線Oracle庫整理

c 連線oracle庫整理 1.使用framework集連線 oracleclient 1.1 條件 安裝oracle客戶端 1.2 連線字串 建議使用1.2.2 否則在oracle 客戶端裡必須要做配置 1.3 注意 system.data.oracleclient.oracleconnectio...

SQL多表連線 的種類

多表連線的種類 根據結果集生成的規則不同,連線可以分為 交叉連線 內連線內連線原理 一 t1表和t2表做內連線,連線條件為on t1.c1 t2.c2,假設t1表做驅動表,t2表做匹配表,記錄的匹配過程如下 從t1表中讀取第一條記錄r1,若它的c1值為1 根據該值到t2表中查詢匹配的記錄,即需要遍歷...