mysql如果发现查询缓慢,添加索引是最直接有效的办法了,下面就来介绍索引的数据结构和各种坑!! 别忘了打开mysql 的慢查询
索引的分类
- 主键索引:一张表只能有一个主键索引,不允许重复、不允许为 NULL;
- 唯一索引:数据列不允许重复,允许为 NULL 值,一张表可有多个唯一索引,但是一个唯一索引只能包含一列,比如身份证号码、卡号等都可以作为唯一索引;
- 普通索引:一张表可以创建多个普通索引,一个普通索引可以包含多个字段,允许数据重复,允许 NULL 值插入;
- 全文索引:让搜索关键词更高效的一种索引。
上面是安装逻辑分类的索引,还可以按照物理分为聚合和非聚合索引这个就不做过多解释了
普通索引
其他的几种索引可以根据情况添加,我们重点来看一下普通索引。因为现在都大多数是 InnoDB引擎,所以下面都以 InnoDB为例。因为索引的底层是一颗B+树,所有普通索引的底层也是B+树,正常的索引都会到树的最底层关联到对应主键,对于InnoDB来说 主键和行记录是存在一起的(所以叫聚合索引),这里要注意,若表存在主键,则主键索引就是聚集索引。 若不存在主键,则会把第一个非空的唯一索引作为聚集索引。 否则,就会隐式的定义一个 rowid 作为聚集索引。
通过上图我们可以看到,如果我们建立了(name,age)两个联合索引,我们的最终目的是要找到主键来找到对应行数,但是通过B+树查找的话只能通过name才能找到对应的索引列,所有为啥索引有最左原则就一目了然了