MySql 表有很多类型,这里只讲InnoDB,MyISAM这两种,侧重InnoDB 中的B+Tree索引,其他的大致说说.
首先说说索引的类型,一般索引分为Hash索引和BTree索引(实际结构是B+Tree)
先说Hash索引
如果需要等值查询,Hash索引的优势非常大,但有一个前提:键值唯一(重点)
但是Hash索引无法完成范围查询,无法使用索引排序,无法使用 like'XXX%'这种的模糊查询,不支持联合索引,在大量重复键的情况下,最左前缀原则的效率极低(存在哈希碰撞).
所以说这种索引实际使用得比较少.
接下来说说B+Tree索引
B+Tree的结构如图,除开叶子节点,其余节点都只存储key,这样可以使得非叶子节点的存储空间变小,增大度.叶子节点的索引本身就已经是有序存在,单从这一点看,有点像链表,可以提高访问性能.B+Tree的结构非常重要,这直接影响了索引失效的问题.
接下来回头看看InnoDB,MyISAM这两种引擎对应的B+Tree索引的区别.
先看看InnoDB,