成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

為什么阿里巴巴禁止數據庫中做多表join?

數據庫 MySQL
MySQL是使用了嵌套循環(Nested-Loop Join)的方式來實現關聯查詢的,簡單點說就是要通過兩層循環,用第一張表做外循環,第二張表做內循環,外循環的每一條記錄跟內循環中的記錄作比較,符合條件的就輸出。

?阿里出過一個《Java開發手冊》,上面有一條規約是禁止超過三張表的join。

圖片

而實際操作過程中,我們平時確實在SQL中寫JOIN也比較少,兩張表JOIN有的時候也有,多張表的JOIN在離線數據分析的時候很多,但是在線系統確實很少。經常有人問我為什么?

其實最主要的原因就是join的效率比較低。

MySQL是使用了嵌套循環(Nested-Loop Join)的方式來實現關聯查詢的,簡單點說就是要通過兩層循環,用第一張表做外循環,第二張表做內循環,外循環的每一條記錄跟內循環中的記錄作比較,符合條件的就輸出。

圖片

而具體到算法實現上主要有simple nested loop,block nested loop和index nested loop這三種。

而且這三種的效率都沒有特別高。

首先,最差的算法就是simple nested loop,他的做法簡單粗暴,就是全量掃描連接兩張表進行數據的兩兩對比,所以他的復雜度可以認為是O(n^2)

好一點的算法是index nested loop,當Inner Loop的表用到字段有索引的話,可以用到索引進行查詢數據,因為索引是B+樹的,復雜度可以近似認為是O(nlogn)

那block nested loop這種算法,其實是引入了一個Buffer,會提前把外循環的一部分結果提前放到多個JOIN BUFFER中,然后內循環的每一行都和多個buffer中的所有數據作比較,從而減少內循環的次數。他的復雜度是O(M*N),這里的M是buffer的個數。

所以,雖然MySQL已經盡可能的在優化了,但是這幾種算法復雜度都還是挺高的,這也是為什么不建議在數據庫中多表JOIN的原因。隨著表越多,表中的數據量越多,JOIN的效率會呈指數級下降。

如果不能通過數據庫做關聯查詢,那么需要查詢多表的數據的時候要怎么做呢?

主要有兩種做法:

1、在內存中自己做關聯,即先從數據庫中把數據查出來之后,我們在代碼中再進行二次查詢,然后再進行關聯。 

2、數據冗余,那就是把一些重要的數據在表中做冗余,這樣就可以避免關聯查詢了。

其實數據冗余是互聯網業務中比較常見的做法,其實本質上是軟件開發中一個比較典型的方案,那就是"用空間換時間",通過做一些數據冗余,來提升查詢速度。

在互聯網業務中,比較典型的就是數據量大,并發高,并且通常查詢的頻率要遠高于寫入的頻率,所以適當的做一些反范式,通過做一些字段的冗余,可以提升查詢性能,降低響應時長,從而提升并發度。?

責任編輯:武曉燕 來源: Hollis
相關推薦

2020-09-22 11:40:53

BigDecimalequalsJava

2018-10-16 15:34:17

阿里巴巴Apache Flin大數據

2020-07-30 12:16:33

阿里巴巴Apache對象

2020-09-08 16:25:18

Apache BeancopyJava

2013-08-22 09:26:38

去IOE王堅

2025-04-17 08:47:23

2021-03-02 08:01:15

MySQL數據庫數據庫加密

2019-01-29 15:25:11

阿里巴巴數據庫分庫分表

2023-04-03 07:03:51

阿里巴巴List元素

2016-09-21 20:28:55

阿里巴巴IOE

2020-09-14 09:47:56

Java開發類型

2021-09-17 06:28:20

JOIN阿里Java

2019-03-04 09:22:52

阿里巴巴foreach Java

2019-06-26 07:54:53

ArrayListsubList源碼

2021-08-04 17:20:30

阿里巴巴AsyncJava

2022-03-14 09:41:10

POJO類型系統

2017-12-07 15:07:28

阿里巴巴數據庫技術架構演進

2019-09-02 15:20:28

Java開發繼承

2021-09-07 17:22:43

阿里巴巴辭職高薪

2010-06-28 10:43:47

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品久久久久久久久 | 中文字幕视频在线观看 | 天天天天天天操 | 天天噜天天干 | 久久精品视频免费观看 | 亚洲精品成人在线 | 国产色婷婷精品综合在线手机播放 | 久久99久久99精品免视看婷婷 | 鲁视频| 久久av一区| 五月婷婷丁香 | 午夜小电影| 先锋资源在线 | 色资源在线观看 | 日韩和的一区二区 | 91精品国产高清一区二区三区 | 中日韩欧美一级片 | av中文字幕在线观看 | 成人免费视频观看视频 | 国产欧美精品区一区二区三区 | 手机看片在线播放 | 亚洲精品一区二区二区 | www.色53色.com | 亚洲国产高清高潮精品美女 | 欧美一区在线视频 | 一级毛片在线播放 | 久久国产精品一区二区 | 久久精品成人 | 欧美一级欧美三级在线观看 | 国产成人一区二区 | 成人午夜视频在线观看 | 亚洲h在线观看 | 欧美jizzhd精品欧美巨大免费 | 国产午夜精品一区二区三区嫩草 | 亚洲综合区 | 久久精彩视频 | 超碰操| 亚洲视频一区在线 | 亚洲国产精品久久 | 欧美精品一区二区三区蜜臀 | 国产欧美一区二区三区久久 |