索引
索引可以理解为是数据库中的数据目录,能够帮助我们快速定位到数据,我们的索引和数据就位于存储引擎中
索引的分类
按数据结构分类
- B+树索引
- Hash索引
- Full-tree索引
在InnoDB中支持B+树索引和Full-tree索引,虽然不支持Hash索引但是在其内存结构中有一个自适应hash索引
在myisam中支持B+树索引和Full-tree索引,不支持Hash索引
在memory中支持B+树索引和Hash索引,不支持Full-tree索引
可以通过InnoDB在建表的过程来大致解释一下是怎么选择列作为索引的
- 如果有主键就会将主键作为,聚簇索引的索引键
- 没有主键就会选择表中第一个不包含NULL值得唯一列作为聚簇索引得索引键
- 都没有的话就会使用之前文章提到的Mysql的存储结构中的,存储真实数据部分的三个隐藏字段中的row_id,它将作为隐式自增id作为聚簇索引的索引键
其他的索引都被称为非聚簇索引,或者二级索引,聚簇和非聚簇索引创建索引的时候默认使用的是B+树索引
这个时候就不得不提到数据在B+树的存放形式了,在B+树中,非叶子节点存放的是连续的索引,在叶子节点存放的是索引+数据,而且叶子节点是一个双向链表,有两个指针,分别指向的是上一个叶子节点和下一个叶子节点。
其中非叶子节点是长