国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

            當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > mysql的Innodb引擎中,主鍵索引和普通索引的工作原理是什么?

            mysql的Innodb引擎中,主鍵索引和普通索引的工作原理是什么?

            來(lái)源:千鋒教育
            發(fā)布人:xqq
            時(shí)間: 2023-10-13 09:07:26 1697159246

            一、mysql的Innodb引擎中,主鍵索引和普通索引的工作原理

            在InnoDB中,表都是根據(jù)主鍵順序以索引的形式存放的,這種存儲(chǔ)方式的表稱(chēng)為索引組織表。InnoDB使用了B+樹(shù)索引模型,所以數(shù)據(jù)都是存儲(chǔ)在B+樹(shù)中的。

            每一個(gè)索引在InnoDB里面對(duì)應(yīng)一棵B+樹(shù)。

            假設(shè),我們有一個(gè)主鍵列為ID的表,表中有字段k,并且在k上有索引。

            這個(gè)表的建表語(yǔ)句是:

            mysql> create table T(

            id int primary key,

            k int not null,

            name varchar(16),

            index (k))engine=InnoDB;

            主鍵索引的葉子節(jié)點(diǎn)存的是整行數(shù)據(jù)。在InnoDB里,主鍵索引也被稱(chēng)為聚簇索引(clustered index)。

            非主鍵索引的葉子節(jié)點(diǎn)內(nèi)容是主鍵的值。在InnoDB里,非主鍵索引也被稱(chēng)為二級(jí)索引(secondary index)或普通索引。

            根據(jù)上面的索引結(jié)構(gòu)說(shuō)明,我們來(lái)討論一個(gè)問(wèn)題:基于主鍵索引和普通索引的查詢(xún)有什么區(qū)別?

            如果語(yǔ)句是select * from T where ID=500,即主鍵查詢(xún)方式,則只需要搜索ID這棵B+樹(shù);如果語(yǔ)句是select * from T where k=5,即普通索引查詢(xún)方式,則需要先搜索k索引樹(shù),得到ID的值為500,再到ID索引樹(shù)搜索一次。這個(gè)過(guò)程稱(chēng)為回表。 也就是說(shuō),基于非主鍵索引的查詢(xún)需要多掃描一棵索引樹(shù)。這也是為什么說(shuō)我們要盡量使用主鍵查詢(xún)了。

            延伸閱讀:

            二、索引維護(hù)

            B+樹(shù)為了維護(hù)索引有序性,在插入新值的時(shí)候需要做必要的維護(hù)。以上面這個(gè)圖為例,如果插入新的行ID值為700,則只需要在R5的記錄后面插入一個(gè)新記錄。如果新插入的ID值為400,就相對(duì)麻煩了,需要邏輯上挪動(dòng)后面的數(shù)據(jù),空出位置。

            而更糟的情況是,如果R5所在的數(shù)據(jù)頁(yè)已經(jīng)滿(mǎn)了,根據(jù)B+樹(shù)的算法,這時(shí)候需要申請(qǐng)一個(gè)新的數(shù)據(jù)頁(yè),然后挪動(dòng)部分?jǐn)?shù)據(jù)過(guò)去。這個(gè)過(guò)程稱(chēng)為頁(yè)分裂。在這種情況下,性能自然會(huì)受影響。

            除了性能外,頁(yè)分裂操作還影響數(shù)據(jù)頁(yè)的利用率。原本放在一個(gè)頁(yè)的數(shù)據(jù),現(xiàn)在分到兩個(gè)頁(yè)中,整體空間利用率降低大約50%。

            當(dāng)然有分裂就有合并。當(dāng)相鄰兩個(gè)頁(yè)由于刪除了數(shù)據(jù),利用率很低之后,會(huì)將數(shù)據(jù)頁(yè)做合并。合并的過(guò)程,可以認(rèn)為是分裂過(guò)程的逆過(guò)程。

            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
            請(qǐng)您保持通訊暢通,專(zhuān)屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
            免費(fèi)領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學(xué) 138****2860 剛剛成功領(lǐng)取
            王同學(xué) 131****2015 剛剛成功領(lǐng)取
            張同學(xué) 133****4652 剛剛成功領(lǐng)取
            李同學(xué) 135****8607 剛剛成功領(lǐng)取
            楊同學(xué) 132****5667 剛剛成功領(lǐng)取
            岳同學(xué) 134****6652 剛剛成功領(lǐng)取
            梁同學(xué) 157****2950 剛剛成功領(lǐng)取
            劉同學(xué) 189****1015 剛剛成功領(lǐng)取
            張同學(xué) 155****4678 剛剛成功領(lǐng)取
            鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
            董同學(xué) 138****2867 剛剛成功領(lǐng)取
            周同學(xué) 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            為什么二級(jí)封鎖協(xié)議不能保證可重復(fù)讀,一級(jí)封鎖協(xié)議不能保證可重復(fù)讀和讀臟數(shù)據(jù)?

            一、為什么二級(jí)封鎖協(xié)議不能保證可重復(fù)讀排它鎖又叫寫(xiě)鎖,事務(wù)A對(duì)數(shù)據(jù)D加了排它鎖,其它任何事務(wù)都不能再對(duì)數(shù)據(jù)D加共享鎖或者排它鎖。也就是說(shuō)A...詳情>>

            2023-10-13 11:01:05
            用access做一個(gè)數(shù)據(jù)庫(kù),用戶(hù)登錄界面,不同用戶(hù)權(quán)限不同,應(yīng)該怎么設(shè)置?

            一、用access做一個(gè)數(shù)據(jù)庫(kù),用戶(hù)登錄界面,不同用戶(hù)權(quán)限不同用access做一個(gè)數(shù)據(jù)庫(kù),用戶(hù)登錄界面,不同用戶(hù)權(quán)限不同,應(yīng)該設(shè)置三張表:用戶(hù)表,...詳情>>

            2023-10-13 10:57:31
            MySQL InnoDB聚簇索引B+樹(shù)的階(m)是怎樣決定的?

            一、MySQL InnoDB聚簇索引B+樹(shù)的階(m)是怎樣決定的1、頁(yè)的大小(Page Size)B+樹(shù)是以固定大小的頁(yè)(Page)為單位進(jìn)行存儲(chǔ)和操作的,頁(yè)是數(shù)據(jù)庫(kù)...詳情>>

            2023-10-13 10:26:26
            在 iPad 上運(yùn)行 Windows 是什么體驗(yàn)?

            一、在 iPad 上運(yùn)行 Windows 是什么體驗(yàn)?zāi)壳笆忻嫔嫌幸恍┠軌蛟?iPad 上運(yùn)行 Windows 的應(yīng)用程序,例如 Parallels Access、Splash較好、VMware ...詳情>>

            2023-10-13 10:18:47
            app的啟動(dòng)流程都包括哪些步驟?

            一、app的啟動(dòng)流程包括的步驟1、創(chuàng)建進(jìn)程App發(fā)起進(jìn)程:當(dāng)從桌面啟動(dòng)應(yīng)用,則發(fā)起進(jìn)程便是Launcher所在進(jìn)程;當(dāng)從某App內(nèi)啟動(dòng)遠(yuǎn)程進(jìn)程,則發(fā)送進(jìn)...詳情>>

            2023-10-13 10:03:27
            快速通道