在剛剛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,複製到網頁中打開或者點擊「閱讀原文」)
DBASK,DBA的即時問答平臺
長按,識別二維碼,加入萬人交流社群
請備註:雲和恩墨大講堂