Oracle放大招:MySQL 即將支援 Hash Join

  • 2019 年 10 月 5 日
  • 筆記

在剛剛OOW19會上的《python and mysql 8.0 document store》topic中,終於看到了MySQL即將在8.0.18中支援hash join,自從被Oracle收購後,又一特性被引入到MySQL中,有了Hash Join,SQL的性能將得到顯著的提升,同學們期盼已久,迫不及待的等待測試,BTW:Oracle資料庫在1996年7.3版本中就已經推出了hash join功能。

Topic中給出了MySQL Hash Join的特性介紹:

1、對於大數據量的表關聯,HJ速度將明顯比NL快很多

2、在記憶體中處理

3、必要情況下,會使用磁碟空間

4、用於內連接,可擴展到外連接、半連接和反連接

5、替換查詢計劃中的Block Nested Loop

6、可以通過HINT強制SQL走HJ或者NL

MySQL是一個輕量級的資料庫,使用起來非常簡單,深受開發者喜愛。之所以一直不支援hash join,想必應該是背後的邏輯和數據支撐需要較高開發和維護成本,hash join演算法其實並不複雜,但是要想hash join運行好,類似Oracle CBO一整套的東西是必不可少的,而CBO又依賴於統計資訊,隨之而來的就是Oracle中常見的謂詞越界、數據分布不均、綁定變數窺探等等問題需要解決。

我們從後面看到,MySQL 8.0.18還支援EXPLAIN ANALYZE,也是基於CBO的一些新功能

使用它可以估算成本、查看實際執行的統計數據,包括第一條記錄的返回時間,全部記錄返回時間,返回記錄的數量以及循環數量,EXPLAIN還將可以使用新的輸出格式,樹狀輸出。

隨著企業數據量的增長,不再是幾年前幾十M大小隨便跑的資料庫了,期待MySQL在更多的場景都能發揮作用。

出處:墨天輪(https://www.modb.pro/db/6589,複製到網頁中打開或者點擊「閱讀原文」)

Tags: