日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle的表几种连接比较,几种表连接方式的使用场景

發(fā)布時間:2023/11/27 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle的表几种连接比较,几种表连接方式的使用场景 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1)nested loop

nested loop,指的是兩個表連接時, 通過兩層嵌套循環(huán)來進行依次的匹配, 最后得到返回結(jié)果集的表連接方法.select?t1.owner,t1.object_name,t2.OBJECT_ID

from?test_tab1?t1,

test_tab2?t2

where?t1.OBJECT_ID?=?t2.OBJECT_ID

and?ROWNUM?

select?*

from?test_tab1?t1,

test_tab2?t2

where?t1.OBJECT_ID?>?t2.OBJECT_ID

and??t1.OBJECT_ID?

表t1 作為驅(qū)動表,先對表t2 篩選出<8000的數(shù)據(jù),再以匹配滿足,t1表的> t2.object_id 條件,依次執(zhí)行。

關(guān)于嵌套循環(huán),首先,要確保結(jié)果集小的表為驅(qū)動表,結(jié)果集多的表為被驅(qū)動表。這不意味著記錄多的表不能作為驅(qū)動表, 只要通過謂詞條件過濾后得到的結(jié)果集比較小,也可以作為驅(qū)動表。

其次,在驅(qū)動表的謂詞條件列以及被驅(qū)動表的連接列上加上索引,能夠顯著的提高執(zhí)行性能。

最后,如果要查詢的列都在索引中,避免回表查詢列信息時,又將進一步提高執(zhí)行性能。

2)hash joinselect?*

from?test_tab1,

test_tab2

where?test_tab1.OBJECT_ID?=?test_tab2.OBJECT_ID

and?test_tab1.OBJECT_NAME?=?'T_TEST1'

3)sort merge join

Merge Join 是先將關(guān)聯(lián)表的關(guān)聯(lián)列各自做排序,然后從各自的排序表中抽取數(shù)據(jù),到另一個排序表中做匹配。

例如,下面的兩表,滿足篩選條件后,進行排序,特別是對于數(shù)據(jù)已經(jīng)是排序的情況下。

select?*

from?test_tab1?t1,

test_tab2?t2

where??t1.OBJECT_ID>t2.OBJECT_ID+10?and?t1.OBJECT_ID<300;

/

可以看出對t1和t2表都做了全表掃描,對數(shù)據(jù)進行了排序,然后對t1 object_id結(jié)果集進行了匹配和關(guān)聯(lián),最后把結(jié)果輸出。

4)merge join cartesianselect?t1.owner,t2.object_name

from?test_tab1?t1,

test_tab2?t2

where?t1.OBJECT_ID?

上面對t1 表的object_id進行過濾處理后,形成結(jié)果集1,這樣的數(shù)據(jù)可能是排序的,也有可能是不排序的。此后,在對t2表的object_id進行過濾,t1表進行排序,最后吧所有的結(jié)果集都進行合并。

關(guān)于笛卡爾的參數(shù):alter?system?set?"_optimizer_mjc_enabled"?=?false;

or

alter?session?set?"_optimizer_mjc_enabled"?=?false;

5)外連接.select?t1.owner,t1.object_name,t2.OBJECT_ID

from?test_tab1?t1,

test_tab2?t2

where?t1.OBJECT_ID?=?t2.OBJECT_ID(+)

and?ROWNUM?

不加(+),就變成hash join,這是由于t1 表不需要滿足外鏈接查詢條件,及完成兩表掃描后,不需要外鏈接查詢條件,直接返回到結(jié)果集。

可以看到先對表t2 進行了<1000的過濾,在對表t1 <1000,也即是t1 為主表,即使有些記錄關(guān)聯(lián)不上,主表的信息都能夠查詢出來。

這個可以通過訪問路徑access可以看出"T1"."OBJECT_ID"(+)="T2"."OBJECT_ID"

總結(jié)

以上是生活随笔為你收集整理的oracle的表几种连接比较,几种表连接方式的使用场景的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉(zhuǎn)載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:oracle的表几种连接比较,几种表连接方式的使用场景