实战-第三弹

书接上回,既然索引那么重要,那我们在创建索引的时候应该怎么选择?

CREATE TABLE `geek` (
  `a` int(11) NOT NULL,
  `b` int(11) NOT NULL,
  `c` int(11) NOT NULL,
  `d` int(11) NOT NULL,
  PRIMARY KEY (`a`,`b`),
  KEY `c` (`c`),
  KEY `ca` (`c`,`a`),
  KEY `cb` (`c`,`b`)
) ENGINE=InnoDB;

我们在创建表geek的时候创建了4个索引,分别是主键索引,索引c、ca、cb。

当下场景里,涉及的查询语句为:

-- 查询语句1
select * from geek where c=N order by a limit 1;
-- 查询语句2
select * from geek where c=N order by b limit 1;

查询语句1,我们需要对c,a字段进行排序。

查询语句2,我们需要对c,b字段进行排序。

针对这两个语句,请你来分析一下上面这四个索引是否合理:

再回答问题之前,我们先复习一下索引的类型;

mysql中的索引分为主键索引和非主键索引。

主键的作用是存储数据,非主键索引索引的作用是加快查询速度。

主键索引上存储的是磁盘上数据的地址,非主键索引上存储的是主键ID,对于非主键索引,当我们要查询的字段很多,仅仅依靠索引字段无法满足查询要求的时候,就会涉及到一个回表的操作。

回表:非主键索引利用叶子结点上的主键ID去主键索引上查询数据的过程。

有了上述知识,我们就能很快回答出来索引c,a是多余的,我们通过索引c就可以定位到数据的主键索引,主键索引a,b中又是按照a,b字段进行排序的,因此c,a索引是多余的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值