為什麼MongoDB採用B樹索引,而Mysql用B 樹做索引

時間 2021-06-13 06:40:24

1樓:智者總要千慮

先從資料結構的角度來答。 題主應該知道b-樹和b+樹最重要的一個區別就是b+樹只有葉節點存放資料,其餘節點用來索引,而b-樹是每個索引節點都會有data域。 這就決定了b+樹更適合用來儲存外部資料,也就是所謂的磁碟資料。

從mysql(inoodb)的角...

2樓:愛可生雲資料庫

事實上,在mysql資料庫中,諸多儲存引擎使用的是b+樹,即便其名字看上去是btree。

4.1 innodb的索引機制

先以innodb儲存引擎為例,說明innodb引擎是如何利用b+樹建立索引的

首先建立一張表:zodiac,並插入一些資料

對於innodb來說,只有一個資料檔案,這個資料檔案本身就是用b+樹形式組織,b+樹每個節點的關鍵字就是表的主鍵,因此innode的資料檔案本身就是主索引檔案,如下圖所示,主索引中的葉子頁(leaf page)包含了資料記錄,但非葉子節點只包含了主鍵,術語「聚簇」表示資料行和相鄰的鍵值緊湊地儲存在一起,因此這種索引被稱為聚簇索引,或聚集索引。

這種索引方式,可以提高資料訪問的速度,因為索引和資料是儲存在同一棵b樹之中,從聚簇索引中獲取資料通常比在非聚簇索引中要來得快。

所以可以說,innodb的資料檔案是依靠主鍵組織起來的,這也就是為什麼innodb引擎下建立的表,必須指定主鍵的原因,如果沒有顯式指定主鍵,innodb引擎仍然會對該表隱式地定義一個主鍵作為聚簇索引。

同樣innodb的輔助索引,如下圖所示,假設這些字元是按照生肖的順序排列的(其實我也不知道具體怎麼實現,不要在意這些細節,就是舉個例子),其葉子節點中也包含了記錄的主鍵,因此innodb引擎在查詢輔助索引的時候會查詢兩次,首先通過輔助索引得到主鍵值,然後再查詢主索引,略微有點囉嗦

mysql索引的資料結構,為什麼用b+樹

3樓:顏竹稱畫

先從資料結構的角度來答。

題主應該知道b-樹和b+樹最重要的一個區別就是b+樹只有葉節點存放資料,其餘節點用來索引,而b-樹是每個索引節點都會有data域。

這就決定了b+樹更適合用來儲存外部資料,也就是所謂的磁碟資料。

b+樹索引是什麼?

4樓:厲害炮彈不虛發

先從資料結構的角度來答。題主應該知道b-樹和b+樹最重要的一個區別就是b+樹只有葉節點存放資料,其餘節點用來索引,而b-樹是每個索引節點都會有data域。這就決定了b+樹更適合用來儲存外部資料,也就是所謂的磁碟資料。

從mysql(inoodb)的角度來看,b+樹是用來充當索引的,一般來說索引非常大,尤其是關係性資料庫這種資料量大的索引能達到億級別,所以為了減少記憶體的佔用,索引也會被儲存在磁碟上。那麼mysql如何衡量查詢效率呢?磁碟io次數,b-樹(b類樹)的特定就是每層節點數目非常多,層數很少,目的就是為了就少磁碟io次數,當查詢資料的時候,最好的情況就是很快找到目標索引,然後讀取資料,使用b+樹就能很好的完成這個目的,但是b-樹的每個節點都有data域(指標),這無疑增大了節點大小,說白了增加了磁碟io次數(磁碟io一次讀出的資料量大小是固定的,單個資料變大,每次讀出的就少,io次數增多,一次io多耗時啊!

),而b+樹除了葉子節點其它節點並不儲存資料,節點小,磁碟io次數就少。這是優點之一。另一個優點是什麼,b+樹所有的data域在葉子節點,一般來說都會進行一個優化,就是將所有的葉子節點用指標串起來。

這樣遍歷葉子節點就能獲得全部資料,這樣就能進行區間訪問啦。至於mongodb為什麼使用b-樹而不是b+樹,可以從它的設計角度來考慮,它並不是傳統的關係性資料庫,而是以json格式作為儲存的nosql,目的就是高效能,高可用,易擴充套件。首先它擺脫了關係模型,上面所述的優點2需求就沒那麼強烈了,其次mysql由於使用b+樹,資料都在葉節點上,每次查詢都需要訪問到葉節點,而mongodb使用b-樹,所有節點都有data域,只要找到指定索引就可以進行訪問,無疑單次查詢平均快於mysql(但側面來看mysql至少平均查詢耗時差不多)。

總體來說,mysql選用b+樹和mongodb選用b-樹還是以自己的需求來選擇的。

為什麼汽車不採用指紋識別

因為現在的指紋識別也不太安全,容易發生汽車被盜事件。現在是有的,汽車上指紋解鎖開門等,都很方便,只不過使用的範圍不是很廣 可能是覺得汽車採用指紋識別的話比較麻煩吧,比較浪費時間。因為汽車採用指紋識別其實是很不安全的,容易被盜。因為指紋識別技術中還存在著很大的安全隱患的。因為指紋識別非常容易造成車輛失...

為什麼我國不宜採用判例法制度,為什麼我國不宜採用判例法制度

你是要回答問題嗎?問答還是論述?一般論述這種題分幾個方面 先說我們國家必須堅持成文法,然後歷史。從子產鑄刑鼎以來我國一直堅持成文法 如果我沒記錯。判例法只是少數 時期,所以歷史證明了我國適應成文法 再說,基於民主主義保障人權,人民制定成文法符合民主人權,判例法不符合。最後,我們大陸法系的一些判例。外...

為什麼隔熱 隔音玻璃都會採用雙層玻璃

隴東槍 建築上用到 雙層真空隔音玻璃 是在生產時先做成兩塊平板玻璃,然後在兩塊玻璃重合的邊緣放置相應的 密封膠條 材料,並且對中空處進行 抽真空 處理 實際上不完全是真空 最後再 封堵 抽真空的操作點,產品就成了 雙層真空玻璃 了,不過這個處理製作的生產,應該是在乾燥環境裡完成的。隔音玻璃產生隔音效...