hash join(雜湊連線)
sort merge join(合併排序連線)
join的連線方式的的選擇
阿里sql軍規:(強制)超過三個表禁止join。需要join的字段,資料型別必須絕對一致;多表關聯查詢時,保證被關聯的字段需要有索引。nested loop:巢狀連線說明:即使雙表join也要注意表索引,sql效能。
hash join:雜湊連線
merge join:排序合併連線
巢狀查詢中又細分為三種查詢方式:1:****** nested-loop join、
2:index nested-loop join、block
3:nested-loop join。
暴力查詢。比如現在有表a和表b,然後使用表a去 left join 表b 。那麼這種的查詢方式就是依次把錶a中的記錄拿出來去匹配表b中的所有的記錄。利用這種方式,如果表a中有10條記錄。表b中有10條記錄。那麼共需要10*10=100次的查詢。
不過這種一般資料庫中不使用。
顧名思義:這種是匹配索引進行關聯查詢地。比上種的查詢效率要高很多。這裡的索引指的的是被關聯的表字段上有索引。
在sql:表a left join 表b 中的表b是被關聯表。
因為mysql的資料結構是b+tree的形式存放的。所以在匹配的時候如果使用的是表b的索引字段的話。就不會對錶b進行全表的匹配,而是走索引匹配。
如果索引使用的還是主鍵的話,因為主鍵的唯一性,效率還會更高。
這種方式和第一種方式類似。當被關聯表的關聯字段不是索引欄位的時候。一般都是使用本方式進行查詢。他和第一種方式的區別就是:他會把主表中涉及到查詢的所有的列(on條件查詢使用的列還有select中查詢的列欄位)先載入出來放在乙個快取區域中,然後在和被關聯表進行依次匹配。
這種方式雖然查詢的次數不會發生改變,還是遍歷逐個匹配,但是根據查詢的列不同載入的資料量不同,所以還是對於查詢效能有些提高的。
2019 年 10 月 14 日 正式發布了 mysql 8.0.18 ga 版本。多表連線查詢支援 hash join 方式。hash join 不需要索引的支援。大多數情況下,hash join 比之前的 block nested-loop 演算法在沒有索引時的等值連線更加高效。
1:當前優化器的模式2:取決於表的大小
3:連線列是否有索引
4:連線列是否排序
適用情況: 在兩個表的資料量區別很大的時候使用hash join.1: 會將兩個表的連線列資料放在建立在記憶體中的雜湊(hash表)表中。然後進行兩個關聯列進行匹配。
2:如果hash錶太大,無法在記憶體中一次構建出來。則會分成多個區域,把多餘出來資料寫入磁碟。這裡會多乙個寫的動作。
3:可以用use_hash(table_name1 table_name2)提示來強制使用雜湊連線
適用情況:不等價關聯(>,<,>=,<=,<>)。
hash_join_enabled=false。
用在沒有索引,並且資料已經排序的情況.
1:先將關聯表的關聯列各自做排序,然後從各自的排序表中抽取資料,到另乙個排序表中做匹配。
2:通常來講,能夠使用merge join的地方,hash join都可以發揮更好的效能,即雜湊連線的效果都比排序合併連線要好。然而如果行源已經被排過序,在執行排序合併連線時不需要再排序了,這時排序合併連線的效能會優於雜湊連線。
3:可以使用use_merge(table_name1 table_name2)來強制使用排序合併連線.
適用情況:主表資訊較少(少於10000條),而且條件列有索引。1:join的順序很重要,驅動表的資料量一定要小。
2:使用use_nl(table_name1 table_name2)可是強制cbo 執行巢狀迴圈連線。
MySQL JOIN 多表連線
除了常用的兩個表連線之外,sql mysql join 語法還支援多表連線。多表連線基本語法如下 from table1 inner left right join table2 on condition inner left right join table3 on condition join ...
MySQL JOIN 多表連線
除了常用的兩個表連線之外,sql mysql join 語法還支援多表連線。多表連線基本語法如下 1 fromtable1inner left rightjointable2onconditioninner left rightjointable3oncondition article 文章表 ai...
MySqljoin查詢筆記
一 內連線查詢 inner join 關鍵字 inner join on 語句 select from a table a inner join b table b on a.a id b.b id 說明 組合兩個表中的記錄,返回關聯字段相符的記錄,也就是返回兩個表的交集 陰影 部分。案例解釋 在b...