MySQL-InnoDB索引实现

在这里插入图片描述

联合索引提高查询效率的原理

MySQL会为InnoDB的每个表建立聚簇索引,如果表有索引会建立二级索引。聚簇索引以主键建立索引,如果没有主键以表中的唯一键建立,唯一键也没会以隐式的创建一个自增的列来建立。聚簇索引和二级索引都是一个b+树,b+树的特点是数据按一定顺序存在叶子节点且每页数据相连。一般情况下使用索引查询时,先查询二级索引的b+树,查到数据并拿数据中保存的主键回查聚簇索引查到所有数据。下面我们举个例子来重现这个过程。

以下面表举例,假设表中已经存了部分数据:

create table `user_info`(
  `id` bigint(20) NOT NULL  PRIMARY KEY,
  `name` varchar(11),
  `age` int(11),
  `phone` varchar(20),
   KEY `key_name_age` (`name`,`age`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

在这里插入图片描述
假如我们想要查找名字为zhaoliu,年龄为30的人的信息。即name=‘zhaoliu’,age=30

(1)先查二级索引,先用二分法查找发现在wangwu名字的右边
(2)读取右边的这页的数据到内存,二分法查到数据2个name为zhaoliu人。
(3)继续二分法比较age查到数据id=31
(4)id=31回查聚簇索引先用二分法查找发现在31右边
(5)读取31左边这页数据到内存,二分法查到数据并返回数据
如果你仅仅查找id,name和age数据那么这样就用到了覆盖索引,这样就不用回查聚簇索引,在第(3)步直接返回数据即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值