十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
MySQL的索引機制原因是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

在此基礎上,我還從簡朝陽的博客上載錄了幾篇介紹mysql中不同存儲引擎不同的索引結(jié)構:
1.Innodb
Innodb 作為 MySQL 中使用最為廣泛的 事務型存儲引擎,不僅在事務實現(xiàn)數(shù)據(jù)版本控制方面和其他存儲引擎有一定的區(qū)別,其數(shù)據(jù)結(jié)構也是以非常有特點的方式存儲的。
每個Innodb表的數(shù)據(jù)其實可以說就是以一個樹型(B-Tree)結(jié)構存儲的,表的數(shù)據(jù)和主鍵(Primary Key)共同組成了一個索引結(jié)構,也就是我們常說的Innodb的Clustered Primary Key。在這個Clustered Primary Key中,Leaf Nodes其實就是實際的表記錄,我們常規(guī)理解上的索引信息全部在Branch Nodes上面。
除了Clustered Primary Key之外的其他所有索引在Innodb中被稱為Secondary Index。Secondary Index就和普通的B-Tree索引差不多了,只不過在Secondary Index的所有Leaf Nodes上面同時包含了所指向數(shù)據(jù)記錄的主鍵信息,而不是直接指向數(shù)據(jù)記錄的位置信息。
所以,在 Innodb 中,如果主鍵值占用存儲空間較大的話,會直接影響整個存儲 Innodb 表所需要的物理空間,同時也會直接影響到 Innodb 的查詢性能。
2. MyISAM存儲引擎
在此之前曾經(jīng)寫過一篇介紹 “Innodb 索引結(jié)構了解 – Innodb Index Structure” 的文章,這次再接著分析一下 MyISAM 存儲引擎索引的 基本存儲結(jié)構。
從索引基本的存放數(shù)據(jù)結(jié)構來說,MyISAM 的索引不論是 Primary Key 還是普通 Index,存儲結(jié)構都基本一樣,基本結(jié)構都是 Balance Tree (簡稱為 B-Tree),所有的鍵值詳細信息和行“指針”信息都存放于 B-Tree 的 Leaf Nodes 上面。這個基本的數(shù)據(jù)結(jié)構和 MySQL 的其他存儲引擎如 Innodb 也基本相同。但是,MyISAM 的索引并不像 Innodb 存儲引擎那樣 Primary Key 和 Secondary Index 中存放的數(shù)據(jù)存在較大區(qū)別。在 MyISAM 存儲引擎中,Primary Key 和其他的普通 Index 的主要區(qū)別僅僅在于 Primary Key 的索引鍵需要滿足是非空的值而已,另外一個區(qū)別其實也是每一個普通索引之間都存在的區(qū)別,就是整個索引樹的鍵值排列順序不太一樣。
由于 MyISAM 存儲引擎中數(shù)據(jù)行的存儲分為固定長度和動態(tài)長度兩種,所以在 MyISAM 存儲引擎的數(shù)據(jù)文件中定位一行數(shù)據(jù)所需要信息也存在兩種方式。一種是直接通過行號(row number)來定位固定長度表數(shù)據(jù)的行,另外一種是通過其他一些相對的文件位置標識信息來定位動態(tài)長度表數(shù)據(jù)的行,這里我們姑且將兩種方式統(tǒng)稱為RID(Row ID)吧。
看完上述內(nèi)容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對創(chuàng)新互聯(lián)網(wǎng)站建設公司,的支持。