联合索引(a,b,c),怎么单独检索b用上索引

本文探讨了如何在MySQL中利用索引提升查询效率,重点讲解了覆盖索引的概念、联合索引的选择,以及在实际场景中选择使用哪种索引的策略。通过实例解析了查询优化中的类型差异,指出优先级顺序:联合索引 > 覆盖索引。
摘要由CSDN通过智能技术生成

1.问题引入

    有下表,name,cid字段是联合索引

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `cid` int(11) DEFAULT NULL,
	`did` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `name_cid_INX` (`name`,`cid`),
  KEY `name_INX` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

2.如何将cid用上索引

EXPLAIN SELECT name, cid FROM student WHERE   cid=1;

说明用上了索引。但是这个索引是覆盖索引!!!!

 覆盖索引其实是一种特殊的联合索引,怎么理解呢,即是你查询的字段的所有数据都在索引上,不需要再进行一次回表查询,这样的索引即为覆盖索引

所以说,只要我们查询的内容联合索引包含的字段,那么我们就可以单独使用某个字段进行查询走索引

3.再走一次联合索引看看,区别如何

EXPLAIN SELECT name, cid FROM student WHERE  name='小红' AND cid=1;

 这两种的区别type是不一样的,覆盖索引是Index,联合索引是ref

再走一例子

EXPLAIN SELECT name FROM student WHERE  name='小红' ;

因此可以得出我们优先走联合索引而不是覆盖索引。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万小猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值