理解MySQL索引前菜

[TOC]

1. 數(shù)據(jù)頁的物理結(jié)構(gòu)

數(shù)據(jù)頁是一個(gè)非常重要的概念臂痕,那在磁盤中是如何存儲一個(gè)一個(gè)的數(shù)據(jù)頁?

大量的數(shù)據(jù)頁是按順序一頁一頁存放的兼雄,然后兩兩相鄰的數(shù)據(jù)頁之間會采取雙向鏈表的格式互相引用姻僧。

圖 1-1

在磁盤文件里就是一段數(shù)據(jù)甫匹,大概類似為:

圖 1-2

然后每一個(gè)數(shù)據(jù)頁會存儲一行一行的數(shù)據(jù),也就是平時(shí)我們在表里插入的一行一行的數(shù)據(jù)就會存儲在數(shù)據(jù)頁里蓝牲,數(shù)據(jù)頁里的每一行數(shù)據(jù)都是依照主鍵大小進(jìn)行排序存儲趟脂。同時(shí)每一行數(shù)據(jù)都會有指針指向下一行數(shù)據(jù)的位置,組成單向鏈表例衍。

圖 1-3

2. 沒有索引的前提下昔期,數(shù)據(jù)庫如何根據(jù)查詢語句搜索數(shù)據(jù)的?

我們已經(jīng)知道數(shù)據(jù)頁的大概結(jié)構(gòu)佛玄,其實(shí)每個(gè)數(shù)據(jù)頁里還會有一個(gè)頁目錄硼一。

頁目錄里面是根據(jù)數(shù)據(jù)行主鍵存放的一個(gè)目錄。同時(shí)數(shù)據(jù)行被分散存儲到不同的槽位里面梦抢,所以般贼,實(shí)際上每個(gè)數(shù)據(jù)頁的目錄里,就是這個(gè)頁里面每個(gè)主鍵跟所在槽位的映射關(guān)系奥吩。

圖 2-1

注意哼蛆,槽位里存儲的是多行數(shù)據(jù)行,而不是一行數(shù)據(jù)行圈驼。

假設(shè)現(xiàn)在根據(jù)主鍵查詢一條數(shù)據(jù)人芽,此時(shí)表里的數(shù)據(jù)不多,剛好都在一個(gè)數(shù)據(jù)頁里绩脆。首先把數(shù)據(jù)頁加載到緩存頁中萤厅,再到頁目錄里根據(jù)主鍵進(jìn)行二分查找橄抹,通過比較查詢主鍵和頁目錄主鍵(槽位里的最小主鍵),快速定位數(shù)據(jù)行所在的槽位惕味,然后到槽位里遍歷每一行數(shù)據(jù)楼誓,快速找到該主鍵對應(yīng)的數(shù)據(jù)。

如果是非主鍵查詢名挥,沒辦法根據(jù)主鍵去頁目錄進(jìn)行二分法查找疟羹,則需要根據(jù)數(shù)據(jù)頁的雙向鏈表不停查找,導(dǎo)致全表掃面禀倔,效率非常低下榄融。

圖 2-2

3. 不斷在表中插入數(shù)據(jù)時(shí),物理存儲是如何進(jìn)行頁分裂

首先我們了解到插入的數(shù)據(jù)救湖,會進(jìn)入數(shù)據(jù)頁的內(nèi)部愧杯,他們會組成一個(gè)單向鏈表,大概的結(jié)構(gòu)如下:

圖 3-1

行類型為2鞋既,證明就是最小一行力九,普通數(shù)據(jù)行的類型為0,最大數(shù)據(jù)行類型為3邑闺。

當(dāng)數(shù)據(jù)越來越多跌前,一個(gè)數(shù)據(jù)頁放不下了,就會再搞一個(gè)新的數(shù)據(jù)頁來存放陡舅,組成一個(gè)雙向鏈表抵乓。

圖 3-2

索引運(yùn)作的核心基礎(chǔ)是,要求后面的數(shù)據(jù)頁的主鍵大于前面數(shù)據(jù)頁的主鍵蹭沛。如果插入數(shù)據(jù)的主鍵是自增的臂寝,那這個(gè)很好保證。

如果不是自增的摊灭,就有可能出現(xiàn)后數(shù)據(jù)頁的主鍵小于前數(shù)據(jù)頁的主鍵值咆贬。

此時(shí)就會出現(xiàn)一個(gè)頁分裂的過程。簡單來講帚呼,就是如果發(fā)現(xiàn)插入后數(shù)據(jù)頁的主鍵值比前數(shù)據(jù)頁的主鍵值要小掏缎,就會把主鍵值大的數(shù)據(jù)行以到新的數(shù)據(jù)頁,把新插入的主鍵值較小的移到上一個(gè)數(shù)據(jù)頁煤杀。

移動前:

圖 3-3

移動后:

圖 3-4

這樣的一個(gè)過程就是 頁分裂眷蜈。

注明:

學(xué)習(xí)筆記總結(jié)于公棕號:儒猿技術(shù)窩。感興趣的同學(xué)可以前往關(guān)注沈自。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載酌儒,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末枯途,一起剝皮案震驚了整個(gè)濱河市忌怎,隨后出現(xiàn)的幾起案子籍滴,更是在濱河造成了極大的恐慌,老刑警劉巖榴啸,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孽惰,死亡現(xiàn)場離奇詭異,居然都是意外死亡鸥印,警方通過查閱死者的電腦和手機(jī)勋功,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來库说,“玉大人狂鞋,你說我怎么就攤上這事×” “怎么了要销?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長夏块。 經(jīng)常有香客問我,道長纤掸,這世上最難降的妖魔是什么脐供? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮借跪,結(jié)果婚禮上政己,老公的妹妹穿的比我還像新娘。我一直安慰自己掏愁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布果港。 她就那樣靜靜地躺著沦泌,像睡著了一般辛掠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萝衩,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天回挽,我揣著相機(jī)與錄音,去河邊找鬼猩谊。 笑死千劈,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牌捷。 我是一名探鬼主播墙牌,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼涡驮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了憔古?” 一聲冷哼從身側(cè)響起遮怜,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鸿市,沒想到半個(gè)月后锯梁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡焰情,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年陌凳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片内舟。...
    茶點(diǎn)故事閱讀 40,865評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡合敦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出验游,到底是詐尸還是另有隱情充岛,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布耕蝉,位于F島的核電站崔梗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏垒在。R本人自食惡果不足惜蒜魄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望场躯。 院中可真熱鬧谈为,春花似錦、人聲如沸踢关。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽耘成。三九已至榔昔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘪菌,已是汗流浹背撒会。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留师妙,地道東北人诵肛。 一個(gè)月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親怔檩。 傳聞我的和親對象是個(gè)殘疾皇子褪秀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容