唯一索引

在同一张表,唯一索引字段的值都是唯一的

可以为null,且可以为多个null值

通常是非聚簇索引

为什么说通常呢?

因为我们可能忘了设置主键索引,那么MySQL就会默认选择一个唯一非空索引作为主键,如果没有,就

会使用row_id

是怎么保证唯一性的?

和主键索引的区别

是否可以为null

是否回表

是否可以有多个

索引类型不同

是否可以为外键

缺点

没有银弹,插入时需要判断是否存在存在

更新索引列字段时,需要先删除原记录,再判断新插入的值是否唯一,再插入(InnoDB帮我们自动完

成的)

这里说的是b+树索引结构的变化

d字段,建了一个索引D,允许为null,那么当 select * from table where d is null,select * from table where d is not null这两条sql,在唯一索引和普通索引下有什么区别?

首先我们可以把索引中的null看成最小值

那么无论是前者还是后者都可以从左开始扫描。但是全表扫,还是索引扫,得看查询优化器的评估或者是

否可以命中索引覆盖