為了便於說明,我們先定義一條資料記錄為乙個二元組[key,data],key為記錄的鍵值,key唯一;data為資料記錄除key外的資料。
b樹每個節點都儲存key和data,所有節點組成這棵樹,並且葉子節點指標為null。
b+樹只有葉子節點儲存data,葉子節點包含了這棵樹的所有鍵值,葉子節點不儲存指標。
後來,在b+樹上增加了順序訪問指標,也就是每個葉子節點增加乙個指向相鄰葉子節點的指標,這樣一棵樹成了資料庫系統實現索引的首選資料結構。
原因有很多,最主要的是這棵樹矮胖,呵呵。一般來說,索引很大,往往以索引檔案的形式儲存的磁碟上,索引查詢時產生磁碟i/o消耗,相對於記憶體訪問,i/o訪問的消耗要高幾個數量級,所以評價乙個資料結構作為索引的優劣最重要的指標就是在查詢過程中磁碟i/o操作次數的時間複雜度。樹高度越小,i/o次數越少。
那為什麼是b+樹而不是b樹呢,因為它內節點不儲存data,這樣乙個節點就可以儲存更多的key。
在mysql中,最常用的兩個儲存引擎是myisam和innodb,它們對索引的實現方式是不同的。
myisam
data存的是資料位址。索引是索引,資料是資料。索引放在xx.myi檔案中,資料放在xx.myd檔案中,所以也叫非聚集索引。
data存的是資料本身。索引也是資料。資料和索引存在乙個xx.idb檔案中,所以也叫聚集索引。
了解了資料結構再看索引,一切都不費解了,只是順著邏輯推而已。另加兩種儲存引擎的區別:
1、myisam是非事務安全的,而innodb是事務安全的
2、myisam鎖的粒度是表級的,而innodb支援行級鎖
3、myisam支援全文型別索引,而innodb不支援全文索引
4、myisam相對簡單,效率上要優於innodb,小型應用可以考慮使用myisam
5、myisam表儲存成檔案形式,跨平台使用更加方便
6、myisam管理非事務表,提供高速儲存和檢索以及全文搜尋能力,如果在應用中執行大量select操作可選擇
7、innodb用於事務處理,具有acid事務支援等特性,如果在應用中執行大量insert和update操作,可選擇。
B樹與B 樹區別
b樹是一種平衡多路查詢樹,它的每乙個節點最多包含k個孩子,k被稱作為b樹的階,k的大小取決於磁碟頁的大小。一棵m階b樹 balanced tree of order m 是一棵平衡的m路搜尋樹。它或者是空樹,或者是滿足下列性質的樹 根結點至少有兩個子女 每個中間節點都包含k 1個元素和k個孩子,其中...
B樹 B 樹 B 樹 B 樹的區別
b樹 即二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比結點關鍵字小,就進...
B樹 B 樹 B 樹 B 樹的區別
即二叉查詢樹 二叉排序樹或二叉搜尋樹 1.所有非葉子結點至多擁有兩個兒子 left和right 2.所有結點儲存乙個關鍵字 3.非葉子結點的左指標指向小於其關鍵字的子樹,右指標指向大於其關鍵字的子樹 如 b樹的搜尋,從根結點開始,如果查詢的關鍵字與結點的關鍵字相等,那麼就命中 否則,如果查詢關鍵字比...