最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年09月29日 08:49:32   作者:奔跑的小河  
這篇文章主要給大家介紹了關(guān)于MyISAM與InnoDB索引實(shí)現(xiàn)對(duì)比的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

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

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

MyISAM主鍵索引

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

MyISAM輔助索引

同樣也是一顆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主索引

上圖是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è)字段長度為6個(gè)字節(jié),類型為長整形。

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

InnoDB輔助索引

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

總結(jié)

在數(shù)據(jù)庫開發(fā)中,了解不同存儲(chǔ)引擎的索引實(shí)現(xiàn)方式對(duì)于正確使用和優(yōu)化索引都非常有幫助。例如,知道了InnoDB的索引實(shí)現(xiàn)后,就很容易明白為什么不建議使用過長的字段作為主鍵,因?yàn)樗休o助索引都引用主索引,過長的主索引會(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)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Dbeaver如何從一個(gè)數(shù)據(jù)庫復(fù)制表到另外一個(gè)數(shù)據(jù)庫

    Dbeaver如何從一個(gè)數(shù)據(jù)庫復(fù)制表到另外一個(gè)數(shù)據(jù)庫

    在數(shù)據(jù)庫管理中,導(dǎo)出表是一項(xiàng)常見操作,可以通過特定的工具或數(shù)據(jù)庫自帶的功能實(shí)現(xiàn),步驟包括:1.在數(shù)據(jù)庫管理軟件中找到需導(dǎo)出的表,右鍵選擇導(dǎo)出數(shù)據(jù),2.選擇目標(biāo)數(shù)據(jù)庫,并進(jìn)行表映射設(shè)置,3.根據(jù)需求調(diào)整導(dǎo)出參數(shù),4.執(zhí)行操作完成數(shù)據(jù)導(dǎo)出
    2024-10-10
  • Linux系統(tǒng)下Navicat 激活教程詳解

    Linux系統(tǒng)下Navicat 激活教程詳解

    Navicat 是香港卓軟數(shù)字科技有限公司生產(chǎn)的一系列 MySQL、MariaDB、MongoDB、Oracle、SQLite、PostgreSQL 及 Microsoft SQL Server 的圖形化數(shù)據(jù)庫管理及發(fā)展軟件。這篇文章主要介紹了Linux系統(tǒng)下Navicat 激活教程詳解,需要的朋友可以參考下
    2021-08-08
  • telnet連接操作memcache服務(wù)器詳解

    telnet連接操作memcache服務(wù)器詳解

    這篇文章主要介紹了telnet連接操作memcache服務(wù)器詳解,本文講解了連接、添加修改、讀取、刪除、清空所有緩存等操作命令,需要的朋友可以參考下
    2015-04-04
  • MSSQL自動(dòng)同步設(shè)置方法

    MSSQL自動(dòng)同步設(shè)置方法

    因有幾臺(tái)服務(wù)器,做下同步方便數(shù)據(jù)傳輸與備份
    2008-09-09
  • GaussDB數(shù)據(jù)庫使用COPY命令導(dǎo)入導(dǎo)出數(shù)據(jù)的場景分析

    GaussDB數(shù)據(jù)庫使用COPY命令導(dǎo)入導(dǎo)出數(shù)據(jù)的場景分析

    使用COPY命令可以方便地導(dǎo)入數(shù)據(jù)到GaussDB,GaussDB還提供了其他數(shù)據(jù)導(dǎo)入工具和功能,如使用GDS導(dǎo)入數(shù)據(jù)、使用INSERT多行插入、使用gsql元命令導(dǎo)入數(shù)據(jù)、ETL工具集成等,以滿足不同場景下的數(shù)據(jù)導(dǎo)入需求,對(duì)GaussDB COPY命令相關(guān)知識(shí)感興趣的朋友一起看看吧
    2024-01-01
  • ADO.NET數(shù)據(jù)庫訪問技術(shù)

    ADO.NET數(shù)據(jù)庫訪問技術(shù)

    本篇文章主要介紹了ADO.NET數(shù)據(jù)庫訪問技術(shù)以及在線或離線訪問數(shù)據(jù)庫的實(shí)現(xiàn)步驟,有需要的朋友可以參考下
    2015-07-07
  • Navicat?Premium12進(jìn)行數(shù)據(jù)庫定期自動(dòng)備份的方法步驟

    Navicat?Premium12進(jìn)行數(shù)據(jù)庫定期自動(dòng)備份的方法步驟

    本文主要介紹了Navicat?Premium?12進(jìn)行數(shù)據(jù)庫定期自動(dòng)備份,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 14張圖看懂什么是區(qū)塊鏈技術(shù)

    14張圖看懂什么是區(qū)塊鏈技術(shù)

    這篇文章主要為大家分享了14張圖,幫助大家看懂什么是區(qū)塊鏈技術(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • centos虛擬機(jī)部署opengauss數(shù)據(jù)庫詳細(xì)圖文教程

    centos虛擬機(jī)部署opengauss數(shù)據(jù)庫詳細(xì)圖文教程

    這篇文章主要給大家介紹了關(guān)于centos虛擬機(jī)部署opengauss數(shù)據(jù)庫的相關(guān)資料,文章詳細(xì)介紹了在CentOS上安裝和配置openGauss數(shù)據(jù)庫的過程,包括安裝步驟、環(huán)境配置、權(quán)限設(shè)置、預(yù)安裝和正式安裝等,需要的朋友可以參考下
    2024-12-12
  • 干掉Navicat,這個(gè)數(shù)據(jù)庫管理工具真香

    干掉Navicat,這個(gè)數(shù)據(jù)庫管理工具真香

    這篇文章主要介紹了干掉Navicat,這個(gè)數(shù)據(jù)庫管理工具真香,本文詳細(xì)的介紹DataGrip的具體使用方法和實(shí)現(xiàn),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10

最新評(píng)論

远安县| 乌兰察布市| 榆社县| 七台河市| 嵊泗县| 穆棱市| 江华| 红河县| 秦皇岛市| 阿尔山市| 沐川县| 德保县| 盘山县| 塔河县| 长治县| 河间市| 赞皇县| 和硕县| 民权县| 凉山| 东阿县| 固阳县| 静宁县| 双流县| 赤城县| 商南县| 巨野县| 若羌县| 鸡泽县| 图们市| 共和县| 疏附县| 桓仁| 台南市| 汽车| 巴林左旗| 郑州市| 珠海市| 平江县| 清苑县| 五常市|