婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > MyISAM與InnoDB索引實(shí)現(xiàn)對(duì)比詳解

MyISAM與InnoDB索引實(shí)現(xiàn)對(duì)比詳解

熱門標(biāo)簽:隨州營(yíng)銷電話機(jī)器人怎么樣 江西南昌百應(yīng)電話機(jī)器人 機(jī)器人電話機(jī)創(chuàng)意繪畫 高德地圖標(biāo)注商家在哪 杭州400電話如何申請(qǐng)的 400電話申請(qǐng)?jiān)趺纯?/a> 400電話從哪里申請(qǐng)濱州 hbuilder地圖標(biāo)注 天音通信電話機(jī)器人

MyISAM索引實(shí)現(xiàn)

MyISAM引擎使用B+Tree作為索引結(jié)構(gòu),葉節(jié)點(diǎn)的data域存放的是數(shù)據(jù)記錄的地址。如圖:

這里設(shè)表一共有三列,假設(shè)我們以Col1為主鍵,則上圖是一個(gè)MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件僅僅保存數(shù)據(jù)記錄的地址。在MyISAM中,主索引和輔助索引(Secondary key)在結(jié)構(gòu)上沒有任何區(qū)別,只是主索引要求key是唯一的,而輔助索引的key可以重復(fù)。如果我們?cè)贑ol2上建立一個(gè)輔助索引,則此索引的結(jié)構(gòu)如下圖所示:

同樣也是一顆B+Tree,data域保存數(shù)據(jù)記錄的地址。因此,MyISAM中索引檢索的算法為首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,則取出其data域的值,然后以data域的值為地址,讀取相應(yīng)數(shù)據(jù)記錄。
MyISAM的索引方式也叫做“非聚集”的,之所以這么稱呼是為了與InnoDB的聚集索引區(qū)分。

InnoDB索引實(shí)現(xiàn)

雖然InnoDB也使用B+Tree作為索引結(jié)構(gòu),但具體實(shí)現(xiàn)方式卻與MyISAM截然不同。

第一個(gè)重大區(qū)別是InnoDB的數(shù)據(jù)文件本身就是索引文件。從上文知道,MyISAM索引文件和數(shù)據(jù)文件是分離的,索引文件僅保存數(shù)據(jù)記錄的地址。而在InnoDB中,表數(shù)據(jù)文件本身就是按B+Tree組織的一個(gè)索引結(jié)構(gòu),這棵樹的葉節(jié)點(diǎn)data域保存了完整的數(shù)據(jù)記錄。這個(gè)索引的key是數(shù)據(jù)表的主鍵,因此InnoDB表數(shù)據(jù)文件本身就是主索引。

上圖是InnoDB主索引(同時(shí)也是數(shù)據(jù)文件)的示意圖,可以看到葉節(jié)點(diǎn)包含了完整的數(shù)據(jù)記錄。這種索引叫做聚集索引。因?yàn)镮nnoDB的數(shù)據(jù)文件本身要按主鍵聚集,所以InnoDB要求表必須有主鍵(MyISAM可以沒有),如果沒有顯式指定,則MySQL系統(tǒng)會(huì)自動(dòng)選擇一個(gè)可以唯一標(biāo)識(shí)數(shù)據(jù)記錄的列作為主鍵,如果不存在這種列,則MySQL自動(dòng)為InnoDB表生成一個(gè)隱含字段作為主鍵,這個(gè)字段長(zhǎng)度為6個(gè)字節(jié),類型為長(zhǎng)整形。

第二個(gè)與MyISAM索引的不同是InnoDB的輔助索引data域存儲(chǔ)相應(yīng)記錄主鍵的值而不是地址。換句話說(shuō),InnoDB的所有輔助索引都引用主鍵作為data域。例如,下圖為定義在Col3上的一個(gè)輔助索引:

這里以英文字符的ASCII碼作為比較準(zhǔn)則。聚集索引這種實(shí)現(xiàn)方式使得按主鍵的搜索十分高效,但是輔助索引搜索需要檢索兩遍索引:首先檢索輔助索引獲得主鍵,然后用主鍵到主索引中檢索獲得記錄。

總結(jié)

在數(shù)據(jù)庫(kù)開發(fā)中,了解不同存儲(chǔ)引擎的索引實(shí)現(xiàn)方式對(duì)于正確使用和優(yōu)化索引都非常有幫助。例如,知道了InnoDB的索引實(shí)現(xiàn)后,就很容易明白為什么不建議使用過長(zhǎng)的字段作為主鍵,因?yàn)樗休o助索引都引用主索引,過長(zhǎng)的主索引會(huì)令輔助索引變得過大。再例如,用非單調(diào)的字段作為主鍵在InnoDB中不是個(gè)好做法,因?yàn)镮nnoDB數(shù)據(jù)文件本身是一顆B+Tree,非單調(diào)的主鍵會(huì)造成在插入新記錄時(shí)數(shù)據(jù)文件為了維持B+Tree的特性而頻繁的分裂調(diào)整,十分低效,而使用自增字段作為主鍵則是一個(gè)很好的選擇。

到此這篇關(guān)于MyISAM與InnoDB索引實(shí)現(xiàn)對(duì)比的文章就介紹到這了,更多相關(guān)MyISAM與InnoDB索引對(duì)比內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • mysql更改引擎(InnoDB,MyISAM)的方法
  • MySQL存儲(chǔ)引擎中的MyISAM和InnoDB區(qū)別詳解
  • 淺談MySQL存儲(chǔ)引擎選擇 InnoDB與MyISAM的優(yōu)缺點(diǎn)分析
  • MySQL數(shù)據(jù)庫(kù)修復(fù)方法(MyISAM/InnoDB)
  • MySQL存儲(chǔ)引擎MyISAM與InnoDB區(qū)別總結(jié)整理
  • 將MySQL從MyISAM轉(zhuǎn)換成InnoDB錯(cuò)誤和解決辦法
  • MySQL存儲(chǔ)引擎 InnoDB與MyISAM的區(qū)別
  • MySQL兩種表存儲(chǔ)結(jié)構(gòu)MyISAM和InnoDB的性能比較測(cè)試
  • MySQL從MyISAM轉(zhuǎn)換成InnoDB錯(cuò)誤與常用解決辦法
  • mysql中engine=innodb和engine=myisam的區(qū)別介紹

標(biāo)簽:石嘴山 鶴崗 沈陽(yáng) 保定 葫蘆島 常德 招商 昆明

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MyISAM與InnoDB索引實(shí)現(xiàn)對(duì)比詳解》,本文關(guān)鍵詞  MyISAM,與,InnoDB,索引,實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MyISAM與InnoDB索引實(shí)現(xiàn)對(duì)比詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于MyISAM與InnoDB索引實(shí)現(xiàn)對(duì)比詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 临泽县| 冀州市| 阿坝县| 长兴县| 湘西| 讷河市| 循化| 枣庄市| 城固县| 永善县| 威海市| 潮安县| 千阳县| 正蓝旗| 镶黄旗| 安图县| 蒲城县| 遵义市| 莎车县| 手游| 屏东县| 六枝特区| 阿勒泰市| 府谷县| 高青县| 马鞍山市| 西安市| 柳州市| 永丰县| 镇宁| 色达县| 和顺县| 班玛县| 长子县| 南漳县| 福清市| 义马市| 田林县| 吉安市| 仪征市| 博爱县|