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

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

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

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

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

MyISAM主鍵索引

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

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

InnoDB主索引

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

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

InnoDB輔助索引

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

總結(jié)

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

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

相關(guān)文章

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

    Dbeaver如何從一個數(shù)據(jù)庫復(fù)制表到另外一個數(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自動同步設(shè)置方法

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

    因有幾臺服務(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)入需求,對GaussDB COPY命令相關(guān)知識感興趣的朋友一起看看吧
    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ù)庫定期自動備份的方法步驟

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

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

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

    這篇文章主要為大家分享了14張圖,幫助大家看懂什么是區(qū)塊鏈技術(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    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,這個數(shù)據(jù)庫管理工具真香

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

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

最新評論

冷水江市| 重庆市| 花垣县| 安徽省| 襄城县| 南充市| 河津市| 刚察县| 淳安县| 永安市| 股票| 永和县| 鹿泉市| 龙里县| 安陆市| 新泰市| 南平市| 松原市| 水城县| 连江县| 那曲县| 西峡县| 牟定县| 广南县| 黄山市| 防城港市| 福安市| 阿鲁科尔沁旗| 泉州市| 交口县| 扬州市| 新乡市| 凤凰县| 个旧市| 通渭县| 平湖市| 惠东县| 阿拉尔市| 东乌珠穆沁旗| 永川市| 南涧|