MySQL普通索引存放數據結構
MySQL使用B樹存儲索引。B樹是一種平衡樹,它保證所有葉子節點到根節點的距離相等。這意味著所有的查詢都可以在相同的時間內完成,無論查詢的是某個特定值,還是范圍查詢。
常見的B樹有B-樹和B+樹。在MySQL中,主要使用的是B+樹。B+樹和B-樹的差異在于非葉子節點存儲的指針數,以及葉子節點是否包含指向下一個葉子節點的指針。
對于每個MySQL索引,都有一個B+樹。B+樹的每個節點包含多個索引項。對于普通索引來說,每個索引項存儲索引列的值,以及一個指向實際數據行的指針。 下面是一個示例,假設有一個普通索引(index1)包含列(id, name)。
id | name | other_columns | | --- | ------| -------------| | 1 | John | ... | | 2 | Mary | ... | | 3 | Sam | ... | | 4 | Tim | ... | | ... | ... | ...
在B+樹中,每個節點包含多個索引項。因此,上面的數據可能看起來像這樣: | id |name |row_pointer | | -- |----|------------| | 1 |John|0x1234567 | | 2 |Mary|0x123456A | | 3 |Sam |0x123456B | | 4 |Tim |0x123456D | 在這個示例中,每個索引項都包含id和name的值,以及一個指針,指向實際的數據行。當執行一個查詢時,MySQL會先從根節點開始搜索B+樹,根據查詢條件逐級向下走,直到葉子節點;然后,MySQL通過指針找到實際的數據行并返回結果。
總結
MySQL普通索引使用B+樹作為存儲結構。樹的每個節點包含多個索引項,在普通索引中,每個索引項包含索引列的值和指向實際數據行的指針。所有的查詢都可以在相同的時間內完成,無論查詢的是某個特定值,還是范圍查詢。
上一篇css中行高設置
下一篇mysql更換數據庫