目录
概念
聚集索引选取规则:
面试回答
大纲
回答
概念
分类 | 含义 | 特点 |
聚集索引(Clustered Index) | 将数据存储与索引放到了一块,索引结构的叶子节点保存了行数据 | 必须有,而且只有一个 |
二级索引(Secondary Index) | 将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键 | 可以存在多个 |
聚集索引选取规则:
如果存在主键,主键索引就是聚集索引。
如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引。
如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。
聚簇索引,存储的是行数据,而二级索引存储的是主键值
当使用非聚簇索引进行查询时,数据库首先在索引中找到满足查询条件的数据行的指针或引用,然后根据这些指针或引用去原始的数据表中找到相应的数据行。这个过程就是回表查询。
回表查询会增加额外的IO操作和时间开销,因为需要再次访问数据表。这尤其在大量数据的情况下或者频繁进行回表查询的场景下会影响查询性能。
为了避免频繁的回表查询,可以考虑使用覆盖索引的方式。覆盖索引是指在非聚簇索引中包含了所需的全部列,从而查询可以直接从索引中获取到所需的所有数据,避免了回表查询的开销,提高查询性能。
面试回答
大纲
什么是聚簇索引什么是非聚簇索引 ?
聚簇索引(聚集索引):数据与索引放到一块,B+树的叶子节点保存了整行数据,有且只有一个
非聚簇索引(二级索引):数据与索引分开存储,B+树的叶子节点保存对应的主键,可以有多个
知道什么是回表查询嘛 ?
通过二级索引找到对应的主键值,到聚集索引中查找整行数据,这个过程就是回表
回答
面试官:什么是聚簇索引什么是非聚簇索引 ?
候选人: 聚簇索引主要是指数据与索引放到一块,B+树的叶子节点保存了整 行数据,有且只有一个,一般情况下主键在作为聚簇索引的 非聚簇索引值的是数据与索引分开存储,B+树的叶子节点保存对应的主键, 可以有多个,一般我们自己定义的索引都是非聚簇索引
面试官:知道什么是回表查询嘛 ?
候选人:嗯,其实跟刚才介绍的聚簇索引和非聚簇索引是有关系的,回表的 意思就是通过二级索引找到对应的主键值,然后再通过主键值找到聚集索引 中所对应的整行数据,这个过程就是回表查询
【备注:如果面试官直接问回表,则需要先介绍聚簇索引和非聚簇索引】