mysql只能用一个索引_MySQL数据库查询记录时是否每次只能使用一个索引

一直以来都没有特别关注单列索引和联合索引的使用区别,今天同事拿个sql来问我优化问题,让我感觉把这方面知识补起来了

起因

以下是一个不完整的课程表,我只把我需要的字段保留下来了,创建了两个单独的索引 idx_city_id 和idx_start_course_time

CREATE TABLE `t_lesson` (

`id` BIGINT(20) NOT NULL AUTO_INCREMENT,

`start_course_time` DATETIME NOT NULL COMMENT '预计直播课上课时间',

`end_course_time` DATETIME NOT NULL COMMENT '预计直播课下课时间',

`city_id` INT(11) NOT NULL,

PRIMARY KEY (`id`),

INDEX `idx_city_id` (`city_id`),

INDEX `idx_start_course_time` (`start_course_time`),

);

执行以下语句:

explain select * from t_lesson where start_course_time = '2019-08-25 06:00:00' and city_id=4;

key 代表 MySQL 实际会使用的索引,是idx_start_course_time

34194ea5a4a3?from=timeline

explain

当时脑子出现了以下几个问题:

MySQL 同时只能使用一个索引吗?

什么情况下能使用两个索引呢?

为什么存在两个索引的情况下却只使用了一个索引呢?

解决问题

MySQL 同时只能使用一个索引吗?

网上随处可见,MySQL5.0之后是有索引合并这个概念的,所以第一个问题解决了,MySQL可以同时使用多个索引

什么情况下能使用两个索引呢?

以下只做个例子,具体情况可以具体看下索引合并文档

explain select * from t_lesson where start_course_time = '2019-08-25 06:00:00' or city_id=4;

34194ea5a4a3?from=timeline

索引合并.png

为什么存在两个索引的情况下却只使用了一个索引呢?

这是我觉得写的比较好的回答:数据库中查询记录时是否每次只能使用一个索引

引用其中的一句话:"与其说是数据库只支持一条查询语句只使用一个索引,倒不如说N条独立索引同时在一条语句使用的消耗比只使用一个索引还要慢。"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值