SQL中 left join 的底層原理

2022-09-17 13:27:15 字數 1491 閱讀 3491

left join的實現效果就是保留左表的全部資訊,將右表往左表上拼接,如果拼不上則為null

除了left join以外,還有inner joinouter joinright join等,文章不介紹其他連線的具體效果,主要講解join的底層原理是如何實現的?具體效果是怎樣呈現的?

只有懂得了底層原理,才能更好的寫出效能優越的sql指令碼,提高sql的執行速度。

join主要有3種方式,具體為:

hash join

merge join

其他概念:

驅動表(也叫外表)和被驅動表(也叫非驅動表,還可以叫匹配表,亦可叫內錶),簡單來說,驅動表就是主表,left join中的左表就是驅動表,right join中的右表是驅動表。

乙個是驅動表,那另乙個就只能是非驅動表,在join的過程中,其實就是從驅動表裡面依次(注意理解這裡面的依次)取出每乙個值,然後去非驅動表裡面進行匹配。

****** nested-loop join是這三種方法裡面最簡單,最好理解,也是最符合大家認知的一種連線方式。

現在有兩張表table atable b,我們讓table a left join table b,觀察是怎樣進行匹配的。

!(從驅動表table a依次取出每乙個值,然後去非驅動表table b中進行從上往下依次匹配,將值返回。

利用這種方式進行匹配,總共需要執行10×10=100次查詢。

利用索引進行匹配,index要求非驅動表上具有索引,有了索引以後可以減少匹配次數,提高查詢效率。

資料庫中索引一般採用b+樹的儲存結構,可以提高效率。

如果索引是主鍵的話,效率會更高,因為主鍵必須是唯一的。所以如果被驅動表是用主鍵去連線,只會出現多對一或者一對一的情況,而不會出現多對多和一對多的情況。

理想情況下,用索引匹配是最高效的一種方式,但是在現實工作中,並不是所有的列都是索引列,這個時候就需要用到 block nested-loop join 方法了,這種方法與第一種方法比較類似,唯一的區別就是會把驅動表中 left join 涉及到的所有列(不止是用來on的列,還有select部分的列)先取出來放到乙個快取區域,然後再去和非驅動表進行匹配,這種方法和第一種方法相比所需要的匹配次數是一樣的,差別就在於驅動表的列數不同,也就是資料量的多少不同。

所以雖然匹配次數沒有減少,但是總體的查詢效能還是有提公升的。

sql 中 left join 的使用

left join 是以左表為基礎,查詢右表的值。如果在右表中沒用沒有資料,則為null。這裡有三張表。線路bs line id,name id主鍵 線路段bs seg id,l id,name l id關聯線路id 配變bs dsub id,seg id,name seg id關聯線路段id 它們...

sql的left join 命令詳解

給個通俗的解釋吧.例表a aid adate 1 a1 2 a2 3 a3 表b bid bdate 1 b1 2 b2 4 b4 兩個表a,b相連線,要取出id相同的字段 select from a inner join b on a.aid b.bid這是僅取出匹配的資料.此時的取出的是 1 a...

sql的left join 命令詳解

給個通俗的解釋吧.例表a aid adate 1 a1 2 a2 3 a3 表b bid bdate 1 b1 2 b2 4 b4 兩個表a,b相連線,要取出id相同的字段 select from a inner join b on a.aid b.bid這是僅取出匹配的資料.此時的取出的是 1 a...