MySQL數(shù)據(jù)庫查詢記錄時是否每次只能使用一個索引

一直以來都沒有特別關注單列索引和聯(lián)合索引的使用區(qū)別,今天同事拿個sql來問我優(yōu)化問題,讓我感覺把這方面知識補起來了

起因

以下是一個不完整的課程表,我只把我需要的字段保留下來了,創(chuàng)建了兩個單獨的索引 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`),
);

執(zhí)行以下語句:

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

當時腦子出現(xiàn)了以下幾個問題:

  • MySQL 同時只能使用一個索引嗎?
  • 什么情況下能使用兩個索引呢?
  • 為什么存在兩個索引的情況下卻只使用了一個索引呢?

解決問題

MySQL 同時只能使用一個索引嗎?

網(wǎng)上隨處可見,MySQL5.0之后是有索引合并這個概念的,所以第一個問題解決了,MySQL可以同時使用多個索引

什么情況下能使用兩個索引呢?

以下只做個例子,具體情況可以具體看下索引合并文檔

explain select * from t_lesson where start_course_time = '2019-08-25 06:00:00' or city_id=4;
索引合并.png

為什么存在兩個索引的情況下卻只使用了一個索引呢?

這是我覺得寫的比較好的回答:數(shù)據(jù)庫中查詢記錄時是否每次只能使用一個索引
引用其中的一句話:"與其說是數(shù)據(jù)庫只支持一條查詢語句只使用一個索引,倒不如說N條獨立索引同時在一條語句使用的消耗比只使用一個索引還要慢。"

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容