1、索引的优缺点
索引的优点:提高查询速度,以空间换速度
索引的缺点:消耗空间
2、索引的分类
1.主键索引
顾名思义主键为索引,创建表时主键默认为主键索引,一张表只能有一个主键索引,不允许重复、不允许为 NULL。一般在建表的时候同时创建主键索引。
2.唯一索引
索引列的值必须唯一,但允许有空值,一张表可以有多个唯一索引。如果时组合索引,则列值的组合必须是唯一的。mysql中的key有两层含义:1.约束(约束和规范数据库的结构完整性)2.索引
3.普通索引
允许数据重复,允许 NULL 值插入。普通索引的唯一任务是加快对数据的访问速度。
4.复合索引
用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引), 查询时含有创建时第一个开始索引才有效。
5.全文索引
它查找的是文本中的关键词,主要用于全文检索。(mysql并不擅长全文索引,全文索引是ES的特长)
聚簇索引
主键索引是唯一的聚簇索引。聚簇索引(clustered index)不是单独的一种索引类型,而是一种数据存储方式。聚簇索引也可理解为将数据存储与索引放到了一块,找到索引也就找到了数据(索引指向的是直接数据,即:聚簇索引—>数据)。
非聚簇索引
数据和索引是分开的,除主键索引以外都是非聚簇索引。非聚簇索引索引存储没有和数据放在一起,而是指向的主键,再通过主键去找到数据(非聚簇索引—>主键—>数据)。
3、索引查询时的两种情况:索引覆盖、回表
索引覆盖
当利用非聚簇索引查的值正好是主键时,因为非聚簇索引正好指向的是主键,所以不用去数据表中拿值可以直接返回主键值。此过程被称为:索引覆盖。
回表
当查询的列值不在索引中时,查询的结果要从表中拿值,此过程称为:回表。
4、最左匹配
不是sql语句的左右而是创建组合索引时的左右。
例如:组合索引为(a,b,c)。
- 组合索引字段无论顺序如何改变都会用到索引,
前提是所有字段都在where条件上
- 如果想要使用一个或者两个字段在where条件上,
必须有组合索引里的第一个字段
,但是与顺序无关,例如a,c或c,a,这种场景是可以命中索引的。但是,b,c或c,b这种是不会命中索引的。
补充:Mysql中key 、primary key 、unique key 与index区别
key 与 index 含义:
- key具有两层含义:1.约束(约束和规范数据库的结构完整性)2.索引
- index:索引
key 种类:
key:等价普通索引 key 键名 (列)
primary key:
约束作用(constraint),主键约束(unique,not null,一表一主键,唯一标识记录),规范存储主键和强调唯一性
为这个key建立主键索引
unique key:
约束作用(constraint),unique约束(保证列或列集合提供了唯一性)
为这个key建立一个唯一索引;
foreign key:
约束作用(constraint),外键约束,规范数据的引用完整性
为这个key建立一个普通索引;