美文网首页MySQL
MySQL数据库查询记录时是否每次只能使用一个索引

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

作者: smlrole | 来源:发表于2019-08-13 17:17 被阅读0次

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

    起因

    以下是一个不完整的课程表,我只把我需要的字段保留下来了,创建了两个单独的索引 idx_city_ididx_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

    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;
    
    索引合并.png

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

    这是我觉得写的比较好的回答:数据库中查询记录时是否每次只能使用一个索引
    引用其中的一句话:"与其说是数据库只支持一条查询语句只使用一个索引,倒不如说N条独立索引同时在一条语句使用的消耗比只使用一个索引还要慢。"

    相关文章

      网友评论

        本文标题:MySQL数据库查询记录时是否每次只能使用一个索引

        本文链接:https://www.haomeiwen.com/subject/lqkbjctx.html