2. B-Tree索引
B-Tree 索引是 MySQL 數(shù)據(jù)庫(kù)中使用最為頻繁的索引類(lèi)型,除了 Archive 存儲(chǔ)引擎之外的其他所有的存儲(chǔ)引擎都支持 B-Tree 索引。不僅僅在 MySQL 中是如此,實(shí)際上在其他的很多數(shù)據(jù)庫(kù)管理系統(tǒng)中B-Tree 索引也同樣是作為最主要的索引類(lèi)型,這主要是因?yàn)?B-Tree 索引的存儲(chǔ)結(jié)構(gòu)在數(shù)據(jù)庫(kù)的數(shù)據(jù)檢
索中有非常優(yōu)異的表現(xiàn)。
一般來(lái)說(shuō), MySQL 中的 B-Tree 索引的物理文件大多都是以 Balance Tree 的結(jié)構(gòu)來(lái)存儲(chǔ)的,也就 是所有實(shí)際需要的數(shù)據(jù)都存放于 Tree 的 Leaf Node ,而且到任何一個(gè) Leaf Node 的最短路徑的長(zhǎng)度都是完全相同的,所以我們大家都稱(chēng)之為 B-Tree 索引當(dāng)然,可能各種數(shù)據(jù)庫(kù)(或 MySQL 的各種存儲(chǔ)引擎)在存放自己的 B-Tree 索引的時(shí)候會(huì)對(duì)存儲(chǔ)結(jié)構(gòu)稍作改造。如 Innodb 存儲(chǔ)引擎的 B-Tree 索引實(shí)際使用的存儲(chǔ)結(jié)構(gòu)實(shí)際上是 B+Tree ,也就是在 B-Tree 數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上做了很小的改造,在每一個(gè)
Leaf Node 上面出了存放索引鍵的相關(guān)信息之外,還存儲(chǔ)了指向與該 Leaf Node 相鄰的后一個(gè) LeafNode 的指針信息,這主要是為了加快檢索多個(gè)相鄰 Leaf Node 的效率考慮。
在 Innodb 存儲(chǔ)引擎中,存在兩種不同形式的索引,一種是 Cluster 形式的主鍵索引( Primary Key ),另外一種則是和其他存儲(chǔ)引擎(如 MyISAM 存儲(chǔ)引擎)存放形式基本相同的普通 B-Tree 索引,這種索引在 Innodb 存儲(chǔ)引擎中被稱(chēng)為 Secondary Index 。下面我們通過(guò)圖示來(lái)針對(duì)這兩種索引的存放
形式做一個(gè)比較。
圖示中左邊為 Clustered 形式存放的 Primary Key ,右側(cè)則為普通的 B-Tree 索引。兩種 Root Node 和 Branch Nodes 方面都還是完全一樣的。而 Leaf Nodes 就出現(xiàn)差異了。在 Prim中, Leaf Nodes 存放的是表的實(shí)際數(shù)據(jù),不僅僅包括主鍵字段的數(shù)據(jù),還包括其他字段的數(shù)據(jù)據(jù)以主鍵值有序的排列。而 Secondary Index 則和其他普通的 B-Tree 索引沒(méi)有太大的差異,Leaf Nodes 出了存放索引鍵 的相關(guān)信息外,還存放了 Innodb 的主鍵值。
所以,在 Innodb 中如果通過(guò)主鍵來(lái)訪(fǎng)問(wèn)數(shù)據(jù)效率是非常高的,而如果是通過(guò) Secondary Index 來(lái)訪(fǎng)問(wèn)數(shù)據(jù)的話(huà), Innodb 首先通過(guò) Secondary Index 的相關(guān)信息,通過(guò)相應(yīng)的索引鍵檢索到 Leaf Node之后,需要再通過(guò) Leaf Node 中存放的主鍵值再通過(guò)主鍵索引來(lái)獲取相應(yīng)的數(shù)據(jù)行。MyISAM 存儲(chǔ)引擎的主鍵索引和非主鍵索引差別很小,只不過(guò)是主鍵索引的索引鍵是一個(gè)唯一且非空 的鍵而已。而且 MyISAM 存儲(chǔ)引擎的索引和 Innodb 的 Secondary Index 的存儲(chǔ)結(jié)構(gòu)也基本相同,主要的區(qū)別只是 MyISAM 存儲(chǔ)引擎在 Leaf Nodes 上面出了存放索引鍵信息之外,再存放能直接定位到 MyISAM 數(shù)據(jù)文件中相應(yīng)的數(shù)據(jù)行的信息(如 Row Number ),但并不會(huì)存放主鍵的鍵值信息。
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com