5.3 聚簇索引 非聚簇索引 覆盖索引
2019-09-29 本文已影响0人
愤愤的有痣青年
聚簇索引
聚簇索引是指索引的叶子节点中存储了整行数据,因此在查询时可以直接通过该索引一次得到该行的所有数据.一般聚簇索引的前提是:
- 字段为该表主键
- 一个表中只有一个聚簇索引(但可以通过覆盖索引的方式来模拟聚簇索引的特性)
- 索引的存储结构只能为B+Tree
每个表中都有一个聚簇索引,一般为该表主键,若该表主键没有显示指定,则其为数据库内置的一个主键.
表的数据都是存储在聚簇索引中的.
主键
对于主键,在设计的时候,需要注意一下几点:
- 最好不要使用随机值,随机值会使表的存储顺序随机,不能发挥数据的聚集优势
- 最好使用递增的数据作为主键(此方式在高并发环境下可能不适用,因为在插入的时候可能会造成主键争用,从而导致锁竞争)
非聚簇索引
一个表中除了聚簇索引外都是非聚簇索引(好像有点废话),其在查询时一般会通过索引得到主键的值,然后再拿主键的值去查询聚簇索引得到最终的数据行,这样的查询叫二级索引
,或者也叫回表
.但是也有例外,如下面的覆盖查询
中的情况就不会进行回表.
覆盖索引
覆盖索引是指,在表中有一个联合索引,若查询时,查询时select的字段为该索引的一个项,且where的也是该索引的一个项,此时就可以通过索引一次性拿到查询结果.
例如 Student
表中有字段number
和name
,且这两个字段组成联合索引key(number,name)
,则使用如下查询将使用覆盖索引查询:
select name from Student where number=1