索引是幫助數據庫高效獲取數據的一種數據結構,經過提取句子主幹,就能夠獲得索引的本質。html
若是想了解Btree
,須要首先了解m-way
數據結構。node
m-way
查找樹是是一種樹形的存儲結構,主要特色以下,數據庫
例如,
3-way如圖,m爲3,那麼每一個節點最多擁有爲2個(m-1),數據結構
待索引元素列表爲: [5, 7, 12, 6, 8, 3, 4]
Btree
是一種平衡的m-way
查找樹,它能夠利用多個分支節點(子樹節點)來減小查詢數據時所經歷的節點數,從而達到節省存取時間的目的。指針
主要特色以下,code
m/2
必須從根節點開始採用二分法查找,因此時間複雜度爲O(logn)
。htm
爲了保證樹的平衡,若是帶插入節點的key數量小於m-1個,則直接插入(不會違反第一條特性),不然,須要將該節點分爲兩部分,再執行該操做。blog
詳細插入操做可參考:http://www.cnblogs.com/yangecnu/p/introduce-b-tree-and-b-plus-tree.html排序
B+tree
是基於Btree
的變體,與Btree
不一樣之處在於,索引
索引自己也很大,不可能所有存儲在內存中,所以索引每每以索引文件的形式存儲的磁盤上。
索引查找過程當中就要產生磁盤I/O消耗,相對於內存存取,I/O存取的消耗要高几個數量級,因此評價一個數據結構做爲索引的優劣最重要的指標就是在查找過程當中磁盤I/O操做次數的漸進複雜度。(換句話說,索引的結構組織要儘可能減小查找過程當中磁盤I/O的存取次數。)
爲了達到下降磁盤I/O的目的
紅黑樹
紅黑樹BST
的時間複雜度是依賴於樹的高度,可是,紅黑樹的高度與Btree相比,高度更大。