數(shù)據(jù)庫(kù)會(huì)使用一些方式來(lái)存儲(chǔ)、讀取和修改數(shù)據(jù),在實(shí)際的數(shù)據(jù)庫(kù)管理中,數(shù)據(jù)庫(kù)會(huì)同時(shí)使用B-tree和B+tree來(lái)存儲(chǔ)數(shù)據(jù)。其中B-tree用于索引,B+tree用于存儲(chǔ)實(shí)際記錄。本文帶來(lái)B-tree在數(shù)據(jù)庫(kù)中的索引機(jī)制。
B-tree即B樹(shù),它是一種數(shù)據(jù)架構(gòu),是MySQL的一種索引類型,以一定順序排列的節(jié)點(diǎn)的形式存儲(chǔ)數(shù)據(jù)。
B-tree存儲(chǔ)數(shù)據(jù)的方式是每個(gè)節(jié)點(diǎn)按升序存儲(chǔ)鍵,每個(gè)鍵包含2個(gè)指向其前后節(jié)點(diǎn)的鏈接。左邊節(jié)點(diǎn)的key小于等于當(dāng)前節(jié)點(diǎn)的key,右邊節(jié)點(diǎn)的key大于等于當(dāng)前節(jié)點(diǎn)的key。如果一個(gè)節(jié)點(diǎn)有n個(gè)鍵,那它最多有n+1個(gè)子節(jié)點(diǎn)。
B-tree索引加快了數(shù)據(jù)查詢,存儲(chǔ)引擎不必遍歷整個(gè)表來(lái)查找數(shù)據(jù),它會(huì)從根節(jié)點(diǎn)開(kāi)始。根節(jié)點(diǎn)位置不會(huì)包含指向子節(jié)點(diǎn)的指針,它通過(guò)查看子節(jié)點(diǎn)中的值并通過(guò)確定節(jié)點(diǎn)的上下界來(lái)找到正確的指針,從而便于存儲(chǔ)引擎查找數(shù)據(jù)。
需要注意,索引的順序會(huì)在建表過(guò)程中取決于列的順序,當(dāng)一個(gè)值重疊時(shí),會(huì)以下一個(gè)值作為排序的標(biāo)準(zhǔn)。因此索引中列的排列是非常重要的,為了獲得最佳性能,需要為同一列創(chuàng)建不同順序的索引。
B-tree不僅存儲(chǔ)索引,還存儲(chǔ)與該索引關(guān)聯(lián)的值,這個(gè)值鏈接到數(shù)據(jù)庫(kù)中的實(shí)際數(shù)據(jù)記錄。






