《Mysql 到底可不可以使用 Join 》

2022-05-02 08:48:08 字數 2250 閱讀 7420

一:join 的問題?

- 在實際生產中,使用 join 一般會集中在以下兩類:

- dba 不讓使用 join ,使用 join 會有什麼問題呢?

- 如果有兩個大小不同的表做 join,應該用哪個表做驅動表呢?

二:資料準備

三:index nested-loop join(nlj) (被驅動表有索引的情況選擇)

- 語句

- 為了避免mysql選擇驅動表對於分析的影響,改用 straight_join 讓 mysql 使用固定的連線方式執行查詢。

- t1 是驅動表,t2 是被驅動表。

- select * from t1 straight_join t2 on (t1.a=t2.a);

- 執行流程

- 在這條語句裡,被驅動表 t2 的字段 a 上有索引,join 過程用上了這個索引

- 從表 t1 中讀入一行資料 r;

- 從資料行 r 中,取出 a 欄位到表 t2 裡去查詢;

- 取出表 t2 中滿足條件的行,跟 r 組成一行,作為結果集的一部分;

- 重複執行步驟 1 到 3,直到表 t1 的末尾迴圈結束。 

- 小結

- 這個過程是先遍歷表 t1,然後根據從表 t1 中取出的每行資料中的 a 值,去表 t2 中查詢滿足條件的記錄。

- 在形式上,這個過程很像寫程式時的巢狀查詢類似,並且可以用上被驅動表的索引,所以我們稱之為「index nested-loop join」,簡稱 nlj。 

-整個過程, 總掃瞄行數是 200(t1 200 + t2 索引樹200)

四:block nested-loop join(nlj)(被驅動表無索引選擇)

- 語句

- select * from t1 straight_join t2 on (t1.a=t2.b);

- 由於表 t2 的字段 b 上沒有索引,因此在執行流程時,每次到 t2 去匹配的時候,就要做一次全表掃瞄。

- 流程

- 把錶 t1 的資料讀入執行緒記憶體 join_buffer 中,由於我們這個語句中寫的是 select *,因此是把整個表 t1 放入了記憶體;

-掃瞄表 t2,把錶 t2 中的每一行取出來,跟 join_buffer 中的資料做對比,滿足 join 條件的,作為結果集的一部分返回。

- 小結

- 可以看到,在這個過程中,對錶 t1 和 t2 都做了一次全表掃瞄,因此總的掃瞄行數是 1100。

- 由於join_buffer 是以無序陣列的方式組織的,因此對錶 t2 中的每一行,都要做 100 次判斷,總共需要在記憶體中做的判斷次數是:100*1000=10 萬次。

- join_buffer 的大小是由引數 join_buffer_size 設定的,預設值是 256k。如果放不下表 t1 的所有資料話,策略很簡單,就是分段放。

五:總結

- 能不能使用 join ?

- 如果可以使用 index nested-loop join 演算法,也就是說可以用上被驅動表上的索引,其實是沒問題的;

- 如果使用 block nested-loop join 演算法,掃瞄行數就會過多。

- 尤其是在大表上的 join 操作,這樣可能要掃瞄被驅動表很多次,會占用大量的系統資源。所以這種 join 盡量不要用。

- 如果要使用 join,應該選擇大表做驅動表還是選擇小表做驅動表?

- 在決定哪個表做驅動表的時候,應該是兩個表按照各自的條件過濾,過濾完成之後,計算參與 join 的各個欄位的總資料量,資料量小的那個表,就是「小表」,應該作為驅動表。

人到底可不可以貌相呢?

這項黑科技能讓你在談笑間窺破潛藏的人生秘密。人到底可不可以貌相呢?俗語說 人不可貌相。佛也說 人不可入相。其大意是說,人的外貌長得英俊 美麗或醜陋,不一定就代表其人一定光是善良的 富貴的,或者是惡毒的 貧賤的。這樣的說法,以相理學來講,大略也是正確的,因為一般沒有學過相理學的人,其觀人之外表只有美醜...

可不可以不勇敢

累了,可以放鬆放鬆 每一次我都說 沒事,我行 我總帶著堅強的微笑 一副永遠勇敢的樣子 可這一次 我想說 我可不可以不勇敢 我只是小心翼翼的問了自己 然後又帶著堅強的表情 勇敢了一次 他們都讚許的微笑了 夜幕低垂 風起的時候 我只想輕輕的問 你可不可以想我 一如我千萬次的想你 我從不欺盼 我的問題得到...

可不可以不寂寞

連續幾個夜晚 乙個人晃著一盞燈 也不知道在做些什麼 就是不要睡覺 因為害怕自己 倒在夢裡 就不願 醒來了.我知道我是沉迷與了自己乖張的情緒 渴望寂寞給我更多思考的空間 卻軟弱的失去了自我 反而被黑夜下的寂寞給吞噬掉了 真正可怕的 就是這種讓內心都充滿無所適從感覺的寂寞 我不害怕形單影隻 我不憂慮總是...