mysql为什么采用b树_为什么MongoDB采用B树索引,而Mysql用B+树做索引
展開全部
事實(shí)上,在MySQL數(shù)據(jù)庫中,諸多存儲(chǔ)引擎使用的是B+樹,即便其名字看上去是BTREE。
4.1 innodb的索引機(jī)制
先以innodb存儲(chǔ)引擎為例,說明62616964757a686964616fe4b893e5b19e31333433643738innodb引擎是如何利用B+樹建立索引的
首先創(chuàng)建一張表:zodiac,并插入一些數(shù)據(jù)
對(duì)于innodb來說,只有一個(gè)數(shù)據(jù)文件,這個(gè)數(shù)據(jù)文件本身就是用B+樹形式組織,B+樹每個(gè)節(jié)點(diǎn)的關(guān)鍵字就是表的主鍵,因此innode的數(shù)據(jù)文件本身就是主索引文件,如下圖所示,主索引中的葉子頁(leaf page)包含了數(shù)據(jù)記錄,但非葉子節(jié)點(diǎn)只包含了主鍵,術(shù)語“聚簇”表示數(shù)據(jù)行和相鄰的鍵值緊湊地存儲(chǔ)在一起,因此這種索引被稱為聚簇索引,或聚集索引。
這種索引方式,可以提高數(shù)據(jù)訪問的速度,因?yàn)樗饕蛿?shù)據(jù)是保存在同一棵B樹之中,從聚簇索引中獲取數(shù)據(jù)通常比在非聚簇索引中要來得快。
所以可以說,innodb的數(shù)據(jù)文件是依靠主鍵組織起來的,這也就是為什么innodb引擎下創(chuàng)建的表,必須指定主鍵的原因,如果沒有顯式指定主鍵,innodb引擎仍然會(huì)對(duì)該表隱式地定義一個(gè)主鍵作為聚簇索引。
同樣innodb的輔助索引,如下圖所示,假設(shè)這些字符是按照生肖的順序排列的(其實(shí)我也不知道具體怎么實(shí)現(xiàn),不要在意這些細(xì)節(jié),就是舉個(gè)例子),其葉子節(jié)點(diǎn)中也包含了記錄的主鍵,因此innodb引擎在查詢輔助索引的時(shí)候會(huì)查詢兩次,首先通過輔助索引得到主鍵值,然后再查詢主索引,略微有點(diǎn)啰嗦
總結(jié)
以上是生活随笔為你收集整理的mysql为什么采用b树_为什么MongoDB采用B树索引,而Mysql用B+树做索引的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装mysql出现错误_安装Mysql时
- 下一篇: mysql+显示表ddl_MySQL_D