Mysql 聚簇索引和非聚簇索引

  • InnoDB 引擎中数据行必须要和某一个索引存储在一起,这个索引就叫做聚簇索引,其他的索引就叫做非聚簇索引
  • 聚簇索引的每个元素上都包含着完整的数据行,非聚簇索引的每个元素上只包含关键字和对应的主键值,所以主键值应该尽量短,以此来节省非聚簇索引占用的空间

聚簇索引的选定

  • 如果你指定了主键,MySQL 将使用主键索引作为聚簇索引
  • 如果你不指定主键,MySQL 会将第一个 not null 的唯一约束索引作为聚簇索引
  • 不满足上述条件时 MySQL 将在隐藏字段 DB_ROW_ID 上创建索引作为聚簇索引

名词介绍

  • 回表:通过非聚簇索引检索到满足条件的元素时,会取元素中的主键值再通过聚簇索引进行检索,才能取到对应的记录,然后再回到非聚簇索引继续检索,重复这个步骤,直到不满足检索条件为止。这个由非聚簇索引到聚簇索引检索的过程叫做回表。回表操作要尽量避免,很影响效率
select * from user where name = 'zhangsan';
  • 索引覆盖:通过非聚簇索引检索时,只检索主键字段和当前字段,此时节点中包含了想要查询的所有字段,不需要进行回表,这个过程就叫做索引覆盖
    • 某些场景中,可以在经常一起查询的字段上建立复合索引,此时会使用索引覆盖,不会回表
select id, name from user where name = 'zhangsan';
  • 最左匹配:使用复合索引时,遵循如下最左匹配原则;最左匹配原则在范围查询后就会失效
-- 首先在 name, age 上创建复合索引
select * from user where name = 'zhangsan' and age = 12; -- 走索引
select * from user where name = 'zhangsan'; -- 走
select * from user where age = 12; -- 不走
select * from user where age = 12 and name = 'zhangsan'; -- 走
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值