2. mysql索引分析

105 阅读2分钟
  1. 什么是聚簇索引?什么是主键索引?什么是二级(普通)索引?

聚簇索引就是主键索引,二级索引是指除主键索引外的索引。

  1. 主键索引和二级索引查询有什么区别?

举例:

create table a ( id int primary key, name varchar(25), index(name))
查询:select * from a where id = 1
查询:select * from a where name = 'lisi'

使用主键查询,在主键的b+树上检索,叶子节点上能查到当前行的所有数据。 使用二级索引查询,需要先在name的二级索引上找到叶子节点上的id索引,然后再去主键索引表中查询数据,这个过程称为回表查询。(非主键索引的叶子节点内容是主键的值。)

  1. 使用自增来做主键和使用业务id来做主键的利弊

自增做主键可以使b+树不容易产生页裂变,否则你插入一些数据,会导致数据页装不下,调整结构。 使用业务id来做主键的场景是kv系统,这个k是唯一的键

4.什么是覆盖索引? 覆盖索引是指,索引上的信息足够满足查询请求,不需要再回到主键索引上去取数据。

很简单,就是你非主键的索引在查询的时候select id from a where name = '1' ,这种情况下你查询的id在name索引的b+树上是存在的,直接返回即可,不需要回表。也就是说,在这个查询里面,索引 name 已经“覆盖了”我们的查询需求,我们称为覆盖索引。

5.最左索引原则:可以是最左边的N的索引字段(name = 'zhangsan' and age = 15),也可以是某个索引字段的最左边的字符串( name like '张%')

第一原则是,如果通过调整顺序,可以少维护一个索引,那么这个顺序往往就是需要优先考虑采用的。

6.索引下推: 例如:建立(name, age)联合索引。

select * from tuser where name like '张 %' and age=10;

如果没有索引下推,则会查询到name为张的去回表到主键表里去查看age=10的数据。 有索引下推的情况下,会直接判断age=10的数据后再去回表查。