相信大部分人都不太了解MyISAM與InnoDB的索引的區(qū)別,今天小編為了讓大家更加了解MyISAM與InnoDB的索引的區(qū)別,給大家總結(jié)了以下內(nèi)容,跟隨小編一起來(lái)看看吧。
鷹潭網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)建站,鷹潭網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為鷹潭上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站制作要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的鷹潭做網(wǎng)站的公司定做!
B+樹(shù),它是一種非常適合用來(lái)做數(shù)據(jù)庫(kù)索引的數(shù)據(jù)結(jié)構(gòu):
(1)很適合磁盤(pán)存儲(chǔ),能夠充分利用局部性原理,磁盤(pán)預(yù)讀;
(2)很低的樹(shù)高度,能夠存儲(chǔ)大量數(shù)據(jù);
(3)索引本身占用的內(nèi)存很?。?/p>
(4)能夠很好的支持單點(diǎn)查詢(xún),范圍查詢(xún),有序性查詢(xún);
數(shù)據(jù)庫(kù)的索引分為主鍵索引(Primary Inkex)與普通索引(Secondary Index)。
一,MyISAM的索引
MyISAM的索引與行記錄是分開(kāi)存儲(chǔ)的,叫做非聚集索引(UnClustered Index)。
其主鍵索引與普通索引沒(méi)有本質(zhì)差異:
有連續(xù)聚集的區(qū)域單獨(dú)存儲(chǔ)行記錄
主鍵索引的葉子節(jié)點(diǎn),存儲(chǔ)主鍵,與對(duì)應(yīng)行記錄的指針
普通索引的葉子結(jié)點(diǎn),存儲(chǔ)索引列,與對(duì)應(yīng)行記錄的指針
畫(huà)外音:MyISAM的表可以沒(méi)有主鍵。
主鍵索引與普通索引是兩棵獨(dú)立的索引B+樹(shù),通過(guò)索引列查找時(shí),先定位到B+樹(shù)的葉子節(jié)點(diǎn),再通過(guò)指針定位到行記錄。
舉個(gè)例子,MyISAM:
t(id PK, name KEY, sex, flag);
表中有四條記錄:
1, shenjian, m, A
3, zhangsan, m, A
5, lisi, m, A
9, wangwu, f, B
其B+樹(shù)索引構(gòu)造如上圖:
行記錄單獨(dú)存儲(chǔ)
id為PK,有一棵id的索引樹(shù),葉子指向行記錄
name為KEY,有一棵name的索引樹(shù),葉子也指向行記錄
二、InnoDB的索引
InnoDB的主鍵索引與行記錄是存儲(chǔ)在一起的,故叫做聚集索引(Clustered Index):
沒(méi)有單獨(dú)區(qū)域存儲(chǔ)行記錄
主鍵索引的葉子節(jié)點(diǎn),存儲(chǔ)主鍵,與對(duì)應(yīng)行記錄(而不是指針)
畫(huà)外音:因此,InnoDB的PK查詢(xún)是非常快的。
因?yàn)檫@個(gè)特性,InnoDB的表必須要有聚集索引:
(1)如果表定義了PK,則PK就是聚集索引;
(2)如果表沒(méi)有定義PK,則第一個(gè)非空unique列是聚集索引;
(3)否則,InnoDB會(huì)創(chuàng)建一個(gè)隱藏的row-id作為聚集索引;
聚集索引,也只能夠有一個(gè),因?yàn)閿?shù)據(jù)行在物理磁盤(pán)上只能有一份聚集存儲(chǔ)。
InnoDB的普通索引可以有多個(gè),它與聚集索引是不同的:
普通索引的葉子節(jié)點(diǎn),存儲(chǔ)主鍵(也不是指針)
對(duì)于InnoDB表,這里的啟示是:
(1)不建議使用較長(zhǎng)的列做主鍵,例如char(64),因?yàn)樗械钠胀ㄋ饕紩?huì)存儲(chǔ)主鍵,會(huì)導(dǎo)致普通索引過(guò)于龐大;
(2)建議使用趨勢(shì)遞增的key做主鍵,由于數(shù)據(jù)行與索引一體,這樣不至于插入記錄時(shí),有大量索引分裂,行記錄移動(dòng);
仍是上面的例子,只是存儲(chǔ)引擎換成InnoDB:
t(id PK, name KEY, sex, flag);
表中還是四條記錄:
1, shenjian, m, A
3, zhangsan, m, A
5, lisi, m, A
9, wangwu, f, B
其B+樹(shù)索引構(gòu)造如上圖:
id為PK,行記錄和id索引樹(shù)存儲(chǔ)在一起
name為KEY,有一棵name的索引樹(shù),葉子存儲(chǔ)id
當(dāng):
select * from t where name=‘lisi’;
會(huì)先通過(guò)name輔助索引定位到B+樹(shù)的葉子節(jié)點(diǎn)得到id=5,再通過(guò)聚集索引定位到行記錄。
畫(huà)外音:所以,其實(shí)掃了2遍索引樹(shù)。
看完上述內(nèi)容,你們對(duì)MyISAM與InnoDB的索引的區(qū)別大概了解了嗎?如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
分享名稱(chēng):MyISAM與InnoDB的索引的區(qū)別
當(dāng)前路徑:http://aaarwkj.com/article0/gpjhio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、、定制開(kāi)發(fā)、手機(jī)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、做網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)