1. 程式人生 > >MySQL索引底層資料結構

MySQL索引底層資料結構

MySQL索引底層資料結構

索引到底是什麼

聯合索引結構

聚集索引和非聚集索引

根本區別

MyISAM和InnoDB的索引

MyISAM索引檔案和資料檔案是分離的(非聚集)

主鍵索引

普通索引

InnoDB索引實現(聚集)

主鍵索引

普通索引

索引到底是什麼

索引是幫助MySQL高效獲取資料的 排好序 的 資料結構

索引儲存在檔案,MySQL使用的資料結構為 B+Tree

資料結構教學網站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

B-Tree 資料結構:

https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653190965&idx=1&sn=53f78fa037386f85531832cd5322d2a0&chksm=8c9909efbbee80f90512f0c36356c31cc74c388c46388dc2317d43c8f8597298f233ca9c29e9&scene=21#wechat_redirect

B+Tree 資料結構:https://mp.weixin.qq.com/s?__biz=MzIxMjE5MTE1Nw==&mid=2653191027&idx=1&sn=4ba22e3ec8bd149f69fc0aba72e4347e&chksm=8c9909a9bbee80bfa1d8497ff0525df130414c1731b5aa5287bf16ea1cf86c8d8e6f20782184&scene=21#wechat_redirect

聯合索引結構

聚集索引和非聚集索引

根本區別

資料的物理存放順序與索引順序是否一致

MyISAM和InnoDB的索引

MyISAM的B+Tree的葉子節點上的data,並不是資料本身,而是資料存放的地址。主索引和輔助索引沒啥區別,只是主索引中的key一定得是唯一的。這裡的索引都是非聚集索引。

InnoDB的資料檔案本身就是索引檔案,B+Tree的葉子節點上的data就是資料本身,key為主鍵,這是聚集索引。非聚集索引,葉子節點上的data是實體地址(所以聚集索引的key,不能過長)。為什麼存放的主鍵,而不是記錄所在地址呢,理由相當簡單,因為記錄所在地址並不能保證一定不會變,但主鍵可以保證。

至於為什麼主鍵通常建議使用自增id呢?

MyISAM索引檔案和資料檔案是分離的(非聚集)

主鍵索引

普通索引

InnoDB索引實現(聚集)

主鍵索引

普通索引

資料檔案本身就是按B+Tree組織的一個索引結構檔案

索引-葉子節點包含了完整的資料記錄

為什麼InnoDB表必須有主鍵,並且推薦使用整型的自增主鍵?

為什麼非主鍵索引結構葉子節點儲存的是主鍵值?(一致性和節省儲存空間)

瀋陽性病醫院哪家好

瀋陽性病醫院