MySQL索引底層資料結構
阿新 • • 發佈:2018-11-01
MySQL索引底層資料結構
索引到底是什麼
聯合索引結構
聚集索引和非聚集索引
根本區別
MyISAM和InnoDB的索引
MyISAM索引檔案和資料檔案是分離的(非聚集)
主鍵索引
普通索引
InnoDB索引實現(聚集)
主鍵索引
普通索引
索引到底是什麼
索引是幫助MySQL高效獲取資料的 排好序 的 資料結構
索引儲存在檔案,MySQL使用的資料結構為 B+Tree
資料結構教學網站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
聯合索引結構
聚集索引和非聚集索引
根本區別
資料的物理存放順序與索引順序是否一致
MyISAM和InnoDB的索引
MyISAM的B+Tree的葉子節點上的data,並不是資料本身,而是資料存放的地址。主索引和輔助索引沒啥區別,只是主索引中的key一定得是唯一的。這裡的索引都是非聚集索引。
InnoDB的資料檔案本身就是索引檔案,B+Tree的葉子節點上的data就是資料本身,key為主鍵,這是聚集索引。非聚集索引,葉子節點上的data是實體地址(所以聚集索引的key,不能過長)。為什麼存放的主鍵,而不是記錄所在地址呢,理由相當簡單,因為記錄所在地址並不能保證一定不會變,但主鍵可以保證。
至於為什麼主鍵通常建議使用自增id呢?
MyISAM索引檔案和資料檔案是分離的(非聚集)
主鍵索引
普通索引
InnoDB索引實現(聚集)
主鍵索引
普通索引
資料檔案本身就是按B+Tree組織的一個索引結構檔案
索引-葉子節點包含了完整的資料記錄
為什麼InnoDB表必須有主鍵,並且推薦使用整型的自增主鍵?
為什麼非主鍵索引結構葉子節點儲存的是主鍵值?(一致性和節省儲存空間)
瀋陽性病醫院哪家好
瀋陽性病醫院