真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQLInnoDB存儲引擎體系架構(gòu)支持的索引是什么

本篇文章為大家展示了MySQL InnoDB存儲引擎體系架構(gòu)支持的索引是什么,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了金川免費(fèi)建站歡迎大家使用!

眾所周知,在MySQL的InnoDB引擎,為了提高查詢速度,可以在字段上添加索引,索引就像一本書的目錄,通過目錄來定位書中的內(nèi)容在哪一頁。

 InnoDB支持的索引有如下幾種:

  • B+樹索引

  • 全文索引

  • 哈希索引

重點(diǎn)介紹B+樹索引。

一、數(shù)據(jù)結(jié)構(gòu)——B+樹

        相信大家在大學(xué)的數(shù)據(jù)結(jié)構(gòu)的課程中都學(xué)過二分查找、二叉樹和平衡二叉樹。在一組有序的數(shù)據(jù)中,利用二分查找可以在log2N的復(fù)雜度中快速檢索數(shù)據(jù),平衡二叉樹是在二叉查找樹的基礎(chǔ)上演變而來,解決了二叉查找樹在極端情況下轉(zhuǎn)化為單鏈表的問題。而B+樹呢?讓我們來看B+樹的結(jié)構(gòu)

MySQL InnoDB存儲引擎體系架構(gòu)支持的索引是什么

在B+樹中,數(shù)據(jù)都是按照從下到大的順序存放在葉子節(jié)點(diǎn)中,由上圖的B+樹可得出,這顆B+樹的高度為2,每頁可存儲4條數(shù)據(jù),扇出為5,第一層是索引頁,第二層是數(shù)據(jù)頁。數(shù)據(jù)庫B+樹索引的本質(zhì)就是B+樹在數(shù)據(jù)庫中的實(shí)現(xiàn),并且B+樹的高度一般限制在2-4層,磁盤的IO操作只需要2-4次,所以在索引上查找數(shù)據(jù),速度很快。

二、B+樹索引

1、聚集索引

        在InnoDB引擎中,都有一個(gè)聚集索引,一般是primary key,若用戶沒有顯示指定primary key,InnoDB會默認(rèn)選擇表的第一個(gè)not null的unique索引為主鍵,若沒有,則會自動創(chuàng)建一個(gè)6字節(jié)大小的_rowid作為主鍵。

MySQL InnoDB存儲引擎體系架構(gòu)支持的索引是什么

上圖是一張聚集索引的示意圖,由上圖,我們可以看到,該樹分為兩層,同樣第一層是索引頁,第二層是數(shù)據(jù)頁,實(shí)實(shí)在在存放數(shù)據(jù)的地方。我們還可以得出,索引頁存放的并不是數(shù)據(jù)而是指向真實(shí)數(shù)據(jù)的一個(gè)偏移量,而真實(shí)數(shù)據(jù)存放在第二層的數(shù)據(jù)頁,所以如果一條SQL語句命中索引,只是命中了索引頁的數(shù)據(jù),然后通過索引頁找到真實(shí)數(shù)據(jù)所在的頁。

        聚集索引的存儲在物理上不是連續(xù)的,在邏輯上卻是連續(xù)的,這是因?yàn)轫撆c頁是通過雙向鏈表維護(hù)的,而每頁中行記錄也是通過雙向鏈表維護(hù)。為什么要雙向鏈表??這是因?yàn)榉奖惴秶樵兒团判?,如過找到某個(gè)索引所在數(shù)據(jù)頁的偏移量,直接遍歷這個(gè)鏈表或者逆序遍歷這個(gè)鏈表,便可以方便的進(jìn)行范圍查詢和逆序排序。比如

select * from table where id>10 and id<1000;

2、輔助索引

        InnoDB的另一種索引,輔助索引,也叫二級索引或非聚集索引。對于輔助索引,葉子并不包含行記錄的全部數(shù)據(jù),葉子節(jié)點(diǎn)除了包含鍵值外,還包含了一個(gè)被稱作“書簽”的東西,該書簽用來告訴InnoDB到哪里可以找到所需的行的數(shù)據(jù),所以書簽實(shí)際存放的是聚集索引,所以如果SQL命中了輔助索引,查詢流程分為兩步:

1、找到索引頁

2、通過索引頁找到數(shù)據(jù)頁,該數(shù)據(jù)頁包含聚集索引的的值

3、通過聚集索引找到行記錄

所以,輔助索引一般比聚集索引多一次IO。

MySQL InnoDB存儲引擎體系架構(gòu)支持的索引是什么

一個(gè)很容易被DBA忽略的問題:如果一條SQL語句命中索引,B+樹索引不能找到一個(gè)給定查詢條件的具體行,只能找到被查詢數(shù)據(jù)行所在的頁,然后將這個(gè)數(shù)據(jù)讀入內(nèi)存,然后再內(nèi)存中遍歷所有行找到數(shù)據(jù)。另外,每一頁大小為16k,每一頁會包含多行,行與行之間是通過雙向鏈表組織的,所以范圍查詢或者順序倒序排序查詢時(shí),只需遍歷鏈表就可以了。

上述內(nèi)容就是MySQL InnoDB存儲引擎體系架構(gòu)支持的索引是什么,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


分享文章:MySQLInnoDB存儲引擎體系架構(gòu)支持的索引是什么
標(biāo)題鏈接:http://weahome.cn/article/popejj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部