在 MySQL 中,是否在 B+樹 的葉子節點上存儲完整的行數據,取決于使用的 存儲引擎 和 索引類型:
聚簇索引 (Clustered Index)
葉子節點包含完整的行數據。
適用場景:MySQL InnoDB 存儲引擎的主鍵索引(或聚簇索引)。
特點:
- 聚簇索引的葉子節點直接存儲了表中的完整數據行。
- 如果查詢條件可以通過聚簇索引找到所需行,則無需回表。
輔助索引 (Secondary Index)
葉子節點不包含完整的行數據。
適用場景:InnoDB 輔助索引。
特點:
- 輔助索引的葉子節點存儲的是索引列的值和主鍵值(Row ID)。
- 如果查詢需要其他字段,必須通過主鍵值(Row ID)回到聚簇索引中讀取完整的行數據。
MyISAM 存儲引擎
葉子節點不包含行數據。
適用場景:MyISAM 存儲引擎(或其他非聚簇存儲引擎)。
特點:
- MyISAM 的 B+樹索引(包括主鍵索引和輔助索引)的葉子節點只存儲索引字段值和對應數據的物理地址。
- MyISAM 表的索引和數據是分開的,因此查詢數據時總是需要通過索引找到物理地址,然后再讀取對應的數據。
- 所有索引(包括主鍵索引和輔助索引)的葉子節點只存儲索引字段值和數據行地址(指向磁盤位置的指針)。
- 需要通過指針回到表中獲取完整數據。