1. 程式人生 > 其它 >Mongodb與MySQL索引的區別

Mongodb與MySQL索引的區別

Mongodb與MySQL索引的區別

Mongodb索引使用B樹,而MySQL使用B+樹。那麼這兩者的區別是什麼?

注意:這裡的Mysql指的是Innodb的儲存引擎下的索引結構,其他儲存引擎暫不考慮。

1、B+樹的特點

1)資料只出現在葉子節點

2)所有葉子節點增加了一個鏈指標

2、B樹的特點

1)樹內的每個節點都儲存資料

2)葉子節點之間無指標相鄰

3、Mongodb與MySQL索引的區別

可以從兩個角度來看

1)資料結構

B樹和B+樹最重要的一個區別就是B+樹只有葉節點存放資料,其餘節點用來索引,而B-樹是每個索引節點都會有Data域。這就決定了B+樹更適合外部儲存,也就是磁碟儲存。

B+樹所有的Data域都在葉子節點,一般來說都會進行一個優化,就是將所有的葉子節點用指標串起來。這樣遍歷葉子節點就能獲得全部資料,這樣就能進行區間訪問啦。

2)設計角度

mongodb並不是傳統的關係性資料庫,而是以Bson(Binary-JSON)格式作為儲存的nosql,目的就是高效能,高可用,易擴充套件。首先它擺脫了關係模型,對於區間訪問的需求就沒那麼強烈了。

其次Mysql由於使用B+樹,資料都在葉節點上,每次查詢都需要訪問到葉節點,而MongoDB使用B樹,所有節點都有Data域,只要找到指定索引就可以進行訪問,無疑單次查詢平均快於Mysql。

4、總結

針對上面的B+樹和B樹的特點,我們做一個總結

1)B樹的樹記憶體儲資料,因此查詢單條資料的時候,B樹的查詢效率不固定,最好的情況是O(1)。我們可以認為在做單一資料查詢的時候,使用B樹平均效能更好。但是,由於B樹中各節點之間沒有指標相鄰,因此B樹不適合做一些資料遍歷操作。

2)B+樹的資料只出現在葉子節點上,因此在查詢單條資料的時候,查詢速度非常穩定。B+樹查詢時間複雜度固定是logn,B樹查詢複雜度最好是 O(1)。因此,在做單一資料的查詢上,其平均效能並不如B樹。但是,B+樹的葉子節點上有指標進行相連,因此在做資料遍歷的時候,只需要對葉子節點進行遍歷即可,這個特性使得B+樹非常適合做範圍查詢。

因此,我們可以做一個推論:沒準是Mysql中資料遍歷操作比較多,所以用B+樹作為索引結構。而Mongodb是做單一查詢比較多,資料遍歷操作比較少,所以用B樹作為索引結構。

幾點疑問

1、那麼為什麼Mysql做資料遍歷操作多?而Mongodb做資料遍歷操作少呢?

因為Mysql是關係型資料庫,而Mongodb是非關係型資料。

2、那為什麼關係型資料庫,做資料遍歷操作多?而非關係型資料庫做資料遍歷操作少呢?

結論:

因此,由於關係型資料庫和非關係型資料的設計方式上的不同。導致在關係型資料中,遍歷操作比較常見,因此採用B+樹作為索引,比較合適。而在非關係型資料庫中,單一查詢比較常見,因此採用B樹作為索引,比較合適。

參考連結:https://www.cnblogs.com/rjzheng/p/12316685.html