MySQL的索引機制原因是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
在此基礎上,我還從簡朝陽的博客上載錄了幾篇介紹mysql中不同存儲引擎不同的索引結構:
1.Innodb
Innodb 作為 MySQL 中使用最為廣泛的 事務型存儲引擎,不僅在事務實現數據版本控制方面和其他存儲引擎有一定的區別,其數據結構也是以非常有特點的方式存儲的。
每個Innodb表的數據其實可以說就是以一個樹型(B-Tree)結構存儲的,表的數據和主鍵(Primary Key)共同組成了一個索引結構,也就是我們常說的Innodb的Clustered Primary Key。在這個Clustered Primary Key中,Leaf Nodes其實就是實際的表記錄,我們常規理解上的索引信息全部在Branch Nodes上面。
除了Clustered Primary Key之外的其他所有索引在Innodb中被稱為Secondary Index。Secondary Index就和普通的B-Tree索引差不多了,只不過在Secondary Index的所有Leaf Nodes上面同時包含了所指向數據記錄的主鍵信息,而不是直接指向數據記錄的位置信息。
所以,在 Innodb 中,如果主鍵值占用存儲空間較大的話,會直接影響整個存儲 Innodb 表所需要的物理空間,同時也會直接影響到 Innodb 的查詢性能。
2. MyISAM存儲引擎
在此之前曾經寫過一篇介紹 “Innodb 索引結構了解 – Innodb Index Structure” 的文章,這次再接著分析一下 MyISAM 存儲引擎索引的 基本存儲結構。
從索引基本的存放數據結構來說,MyISAM 的索引不論是 Primary Key 還是普通 Index,存儲結構都基本一樣,基本結構都是 Balance Tree (簡稱為 B-Tree),所有的鍵值詳細信息和行“指針”信息都存放于 B-Tree 的 Leaf Nodes 上面。這個基本的數據結構和 MySQL 的其他存儲引擎如 Innodb 也基本相同。但是,MyISAM 的索引并不像 Innodb 存儲引擎那樣 Primary Key 和 Secondary Index 中存放的數據存在較大區別。在 MyISAM 存儲引擎中,Primary Key 和其他的普通 Index 的主要區別僅僅在于 Primary Key 的索引鍵需要滿足是非空的唯一值而已,另外一個區別其實也是每一個普通索引之間都存在的區別,就是整個索引樹的鍵值排列順序不太一樣。
由于 MyISAM 存儲引擎中數據行的存儲分為固定長度和動態長度兩種,所以在 MyISAM 存儲引擎的數據文件中定位一行數據所需要信息也存在兩種方式。一種是直接通過行號(row number)來定位固定長度表數據的行,另外一種是通過其他一些相對的文件位置標識信息來定位動態長度表數據的行,這里我們姑且將兩種方式統稱為RID(Row ID)吧。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。