MySQL數(shù)據(jù)庫(kù)索引

前幾天看了一個(gè)mysql索引的視頻,一直沒(méi)有整理,今天突然想到在博客中記錄一下,僅做自己記錄整理用,如果對(duì)您有幫助那再好不過(guò)!

什么是索引?

索引是幫助mysql高效獲取數(shù)據(jù)的排好序的數(shù)據(jù)結(jié)構(gòu)

例如有如下的表:


如果索引的數(shù)據(jù)結(jié)構(gòu)是二叉樹(shù)的話,索引在col2上,那么可能是這種情況:


如果索引的數(shù)據(jù)結(jié)構(gòu)是二叉樹(shù)的話,索引在col1上,那么就是這種情況:


成為了這種線性結(jié)構(gòu),二叉樹(shù)的深度是不可控的,這樣會(huì)增加磁盤(pán)I/O的次數(shù),降低查詢效率。那么我們用紅黑樹(shù)替代


雖然紅黑樹(shù)能夠自動(dòng)平衡,但是實(shí)際上樹(shù)的高度還是不能夠控制。這時(shí)候就用到了B-tree


類似這種,將節(jié)點(diǎn)的容量擴(kuò)大,從而達(dá)到降低樹(shù)的深度的目的來(lái)減少I/O操作。將節(jié)點(diǎn)數(shù)據(jù)讀取到內(nèi)存中查找遠(yuǎn)比一次I/O的時(shí)間少。B-tree的特點(diǎn)就是每層節(jié)點(diǎn)數(shù)目非常多,層數(shù)很少。但是每個(gè)節(jié)點(diǎn)都是data域(指針)這無(wú)疑增大了節(jié)點(diǎn)大小,增加了磁盤(pán)I/O的時(shí)間,那么接下來(lái)就是mysql最終確定的B+tree,B+tree將所有的data都放到了葉子結(jié)點(diǎn)上

B+tree在不同引擎下的表現(xiàn)

MyISAM索引實(shí)現(xiàn),MyISAM索引文件和數(shù)據(jù)文件是分離的

.frm -->表結(jié)構(gòu);

.MYI-->索引數(shù)據(jù);

MYD-->數(shù)據(jù)

InnoDB索引和數(shù)據(jù)在一起

.frm-->表結(jié)構(gòu);

.ibd(index,data)

Innodb必須有主鍵,推薦使用整型。如果建表沒(méi)有建,mysql也會(huì)主動(dòng)建。

為什么要用整型?

1、在查找索引比較大小時(shí),整型要比字符串更方便;

2、字符串不管是在磁盤(pán)中還是內(nèi)存中都要比整型更占內(nèi)存;

為什么自增?

好維護(hù)索引數(shù)據(jù)。新增一條數(shù)據(jù),如果不是自增會(huì)發(fā)生裂變

索引數(shù)據(jù)結(jié)構(gòu)如果采用hash,用hash表存儲(chǔ)索引與數(shù)據(jù)的對(duì)應(yīng)關(guān)系,查找更快,但是當(dāng)條件出現(xiàn)范圍,如>用不到索引

如果內(nèi)容對(duì)大家有所幫助,感謝大家打賞鼓勵(lì)!

?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容