作为后端开发,大家去面试的时候MySQL的索引知识可是必问的一道。简单的问题就是:请你说一下MySQL有哪些索引或则索引类型有哪些?大多数人回答的是:主键索引,普通索引,联合索引,B+树索引,唯一索引,全文索引等等,你说错也不能说错,只是回答的有点乱。
那要怎么回答好呢?直接如下:
索引是什么
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。
索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容,是存储引擎用于快速找到记录的一种数据结构,索引和数据是位于存储引擎中的,比如InnoDB。
索引分类
- 按数据结构分类可分为:B+tree索引、B树索引、Hash索引、Full-text索引。
- 按物理存储分类可分为:聚簇索引、二级索引(辅助索引)。
- 按字段特性分类可分为:主键索引、普通索引、前缀索引。
- 按字段个数分类可分为:单列索引、联合索引(复合索引、组合索引)。
还有一个更全面的回答:
按数据结构分类:
- B+树索引:B+树是一种平衡树结构,常用于 MySQL 中的InnoDB存储引擎。它具有良好的平衡性和可预测性,适用于范围查询和排序操作
- B-Tree索引:这是最常见的索引类型,用于随机和顺序查找,等值查找和范围查询等场景
- Hash索引:适用于精确匹配查找,通常用于内存表。
- 空间数据索引:用于处理地理空间数据,支持距离查询等。
- 全文索引:用于全文搜索,支持文本内容的全文检索。
按物理存储分类:
- 聚簇索引:数据行的物理存储顺序与索引顺序一致。
- 非聚簇索引(辅助索引):数据行的物理存储与索引顺序不一致,需要通过聚簇索引查找数据行。
- 内存索引:将索引数据存储在内存中,用于快速访问。
- 哈希索引:将索引数据以哈希表的方式存储,通常用于内存表。
按字段特性分类:
- 单列索引:仅针对单个字段创建的索引。
- 复合索引:针对多个字段创建的联合索引,可以支持多个字段的组合查询。
- 唯一索引:要求索引列的值在表中是唯一的,用于确保数据的唯一性。
- 普通索引:用于加速查询,但允许重复值的索引类型。
- 全文索引:用于全文搜索,支持文本内容的全文检索。
按字段个数分类:
- 单列索引:仅包含一个字段的索引。
- 复合索引:包含多个字段的联合索引。
- 组合索引:包含多个独立索引的组合索引,用于覆盖多个查询场景。