MyISAM與InnoDB的索引結構


B+Tree的數據結構

  在算法搜索的時候會非常的高效, 這種數據結構特別合適現在的硬盤這個存儲的介質

擴展:

  操作系統上的文件系統也是使用B+Tree的數據結構, 這個不區分操作系統

特點:

  1.單節點可以存儲更多的元素,使得查詢磁盤IO次數更少。

  2.所有查詢都要查找到葉子節點,查詢性能穩定。

  3.所有葉子節點形成有序鏈表,便於范圍查詢。

總結

  B+樹還有一個最大的好處,方便掃庫,B樹必須用中序遍歷的方法按序掃庫,而B+樹直接從葉子結點挨個掃一遍就完了,B+樹支持range-query非常方便,而B樹不支持。這是數據庫選用B+樹的最主要原因。

 

非聚(集)簇結構(MyISAM的索引結構)

主索引

主索引是不能有重復的, 我們的索引下面的數據區保存的是innode(硬盤數據區的編號). 找到索引對應的編號, 通過這個編號區數據區找到這個數據, 就把需要的數據返回給客戶端

普通索引

普通索引的值是可以重復的, 其他和主索引是一樣的

聚簇(集)結構(innodb)的索引結構

主索引

innodb索引的數據在一起的, 所以我們在創建innodb的與myisam是不一樣的, innodb必需創建主鍵ID, 必需實現auto_increment

保存索引的ID是有序增長的, 如果不是有序增加的, 當你插入一條ID小於已經存在的ID的時候, 這個時候ID就會去排序, 后面的值都會在數據區移動, 這個移動過程就會消耗IO, 后面移動的數據越大, 這個消耗就越大, 這是非常非常不好的行為

如果你不創建主鍵, 它是會自動去找一個可以作為主鍵的值, 如果沒有, 他就會隱藏的創建一個作為主鍵的值

既然它一定要有主鍵, 所以我們一定要給它創建

普通索引

普通索引下面的數據區保存的是主鍵的ID, 這些ID會在進行普通索引搜索的時候, 返回, 在返回之后, 再到主鍵索引取進行索引

這就說明, 如果Innodb你不使用主鍵索引進行查詢, 就會出現我們的二次遍歷, 第一次遍歷普通索引, 第二次遍歷主鍵索引

 

總結:

  MyISAM的索引的索引結構都是一樣的, 主索引比其他索引就是多一個不重復的功能, 所以你在使用MySIAM的時候, 創建索引, 可以任意, 但是以數字ID進行自增長的索引,占用的長度與空間更少更小

  還是建議使用auto_increment

  Innodb的主鍵索引與普通索引, 完全不一樣, 主索引只要一次遍歷就可以了, 普通索引必須進行二次遍歷才能得到結果

 

終:

  以后我們的創建表, 一定要創建主鍵, 必需是auto_increment


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM