一,InnoDB索引實(shí)現(xiàn)
1拂募、表數(shù)據(jù)文件本身就是按照B+Tree組織的一個(gè)索引結(jié)構(gòu)文件
mysql默認(rèn)儲(chǔ)存目錄為安裝下的data目錄,每個(gè)庫(kù)對(duì)應(yīng)一個(gè)文件夾(跟庫(kù)名一樣)
存放文件為格式為 .frm、.ibd文件,frm存儲(chǔ)表結(jié)構(gòu)插掂,ibd則存儲(chǔ)的是索引就數(shù)據(jù),較高的版本只有ibd文件了(包含了表結(jié)構(gòu)索引數(shù)據(jù))腥例。
2辅甥、聚集索引-葉子節(jié)點(diǎn)包含了完整的數(shù)據(jù)記錄
3、innoBD表必須使用主鍵院崇,并且推薦使用整型自增主鍵
如果表不創(chuàng)建主鍵mysql底層會(huì)自動(dòng)創(chuàng)建隱示主鍵
推薦使用整型,因?yàn)檎筒挥猛ㄟ^(guò)類(lèi)型轉(zhuǎn)換可以直接比較
4袍祖、非主鍵索引的葉子節(jié)點(diǎn)存放的索引值和是主鍵值
每個(gè)節(jié)點(diǎn)存放的是索引列的值底瓣,非主鍵索引不具備唯一性,需要找到葉子節(jié)點(diǎn)主鍵進(jìn)行回表取數(shù)據(jù)(根據(jù)找到的主鍵值在進(jìn)行聚集索引取數(shù)據(jù))
5蕉陋、每個(gè)節(jié)點(diǎn)存放的默認(rèn)大小16KB(可以調(diào)整不建議調(diào)整)捐凭,可以使用命令查看當(dāng)前大小
show global status like 'Innodb_page_size'
6、每次啟動(dòng)mysql服務(wù)默認(rèn)會(huì)將索引的跟節(jié)點(diǎn)和子節(jié)點(diǎn)讀取存放到內(nèi)存凳鬓,
7茁肠、所有索引都是按小到大順序依次排列,提高查找性能缩举,每個(gè)節(jié)點(diǎn)用二分查找方式
8垦梆、葉子節(jié)點(diǎn)的雙向箭頭兩邊都有一塊空間用于存放邊聯(lián)數(shù)據(jù)地址,
9仅孩、下圖里面的地址是下級(jí)節(jié)點(diǎn)物理地址托猩,