MySQL索引的分类及区别

目录

  • 数据库的索引类型
  • 聚集索引和非聚集索引的效率
  • 唯一索引和主键的区别
  • 索引相关指令

数据库的索引类型

从物理存储角度,索引可以分为以下两类:

  1. 聚集索引(主键索引)按照每张表的主键构造一颗B+树,同时叶子节点中存放的即为整张表的记录数据聚集索引的叶子节点称为数据页,聚集索引的这个特性决定了主索引文件和数据文件为同一份文件,数据的排列顺序和索引的排列顺序一致
  2. 非聚集索引(又叫辅助索引,二级索引,非主键索引):在聚集索引之上创建的索引称之为辅助索引。辅助索引并不存储数据,只存储主键的值,如果使用辅助索引搜索数据就必须先从辅助索引取到主键的值,再使用主键的值去主键索引上查询,直到找到叶子节点上的数据返回,这个操作也称之为回表叶子节点存放的不是实际数据,而是指向实际数据的指针

MySQL索引的分类及区别_第1张图片

有一种特殊的辅助索引叫做覆盖索引,覆盖索引是非聚集组合索引的一种形式,可以避免回表操作。覆盖索引包括在查询里的select、join和where子句用到的所有列,即建立索引的字段正好覆盖了查询语句[select子句]与查询条件[Where子句]中所涉及的字段。因此我们需要select出来的列都已经存在了索引树的叶子节点上。

不是所有类型的索引都可以成为覆盖索引。覆盖索引必须要存储索引的列,而哈希索引、空间索引和全文索引等都不存储索引列的值,所以MySQL只能使用B+Tree索引做覆盖索引
  
从逻辑角度,索引可以分为以下几类:

  1. 普通索引:最基本的索引,它没有任何的限制,仅加速查询。
  2. 唯一索引:它与前面的普通索引类似,不同的是索引列的值必须唯一,但允许有空值。
  3. 主键索引:它是一种特殊的唯一索引,不允许有空值,一般是在建表的时候同时创建主键索引。
  4. 联合索引(又叫做多列索引,复合索引):多列值组成一个索引,专门用于复合查询,其效率大于索引合并(索引合并是使用多个单列索引组合搜索)。

聚集索引和非聚集索引的效率

  1. 聚集索引的范围查询效率比非聚集索引高,因为只要找到第一个索引值记录,其余连续性的记录在物理上一样连续存放。
  2. 聚集索引的修改效率比非聚集索引低,因为为了使数据和索引的排列顺序一致,在插入记录的时候,会对数据页重新排序。

唯一索引和主键的区别

  1. 主键既是约束,也是一种特殊的唯一索引,主键字段不能为NULL,唯一索引可以为NULL。
  2. 主键可以被其他表引用为外键,而唯一索引不能。
  3. 一个表最多只能创建一个主键,但可以创建多个唯一索引。

索引相关指令

创建索引

CREATE INDEX indexName ON table_name (column_name)

添加索引

ALTER table tableName ADD INDEX indexName(columnName)

删除索引的语法

DROP INDEX [indexName] ON mytable; 

你可能感兴趣的:(MySQL,mysql,分类,数据库,索引类型)