主頁 > 知識庫 > MySQL查詢條件中in會用到索引嗎

MySQL查詢條件中in會用到索引嗎

熱門標(biāo)簽:400電話可以免費申請嗎 電銷卡外呼系統(tǒng)供應(yīng)商 怎么在地圖標(biāo)注位置生成圖片 騰訊地圖標(biāo)注提升 福建外呼系統(tǒng)定制化 美國反騷擾電話機器人 銅陵防封電銷卡 真人語音電話機器人 悟空科技電話機器人

當(dāng)用人問你MySQL 查詢條件中 in 會不會用到索引,你該怎么回答?

答案:可能會用到索引

動手來測試下

1.創(chuàng)建一張表,給字段port建立索引

CREATE TABLE `pre_request_logs_20180524` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `ip` char(16) NOT NULL COMMENT '代理IP',
 `port` int(8) NOT NULL COMMENT '端口號',
 `status` enum('成功','失敗') NOT NULL COMMENT '狀態(tài)',
 `create_time` datetime NOT NULL COMMENT '創(chuàng)建時間',
 `update_time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`),
 KEY `idx_port` (`port`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='代理IP請求日志';

插入測試數(shù)據(jù)

INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (1, '192.168.1.199', 53149, '失敗', '2018-05-24 14:55:34', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (2, '192.168.1.100', 10653, '成功', '2018-05-24 14:55:54', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (3, '192.168.1.112', 50359, '失敗', '2018-05-24 14:56:00', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (4, '192.168.1.67', 30426, '失敗', '2018-05-24 14:56:09', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (5, '192.168.1.209', 49323, '失敗', '2018-05-24 14:56:12', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (6, '192.168.1.209', 51161, '成功', '2018-05-24 14:56:13', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (7, '192.168.1.12', 54167, '成功', '2018-05-24 14:56:16', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (8, '192.168.1.64', 20462, '成功', '2018-05-24 14:56:19', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (9, '192.168.1.53', 22823, '失敗', '2018-05-24 14:56:31', '2018-11-16 10:58:13');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (10, '192.168.1.85', 48229, '成功', '2018-05-24 14:56:32', '2018-11-16 11:01:11');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (11, '192.168.1.85', 48229, '成功', '2018-05-24 14:56:32', '2018-11-16 11:01:15');
INSERT INTO ``(`id`, `ip`, `port`, `status`, `create_time`, `update_time`) VALUES (12, '192.168.1.85', 48229, '成功', '2018-05-24 14:56:32', '2018-11-16 13:34:37');

2.測試sql

explain select * from pre_request_logs_20180524 where port in (51161,20462,48229);

執(zhí)行結(jié)果

從結(jié)果來看是沒有用到索引,但不要著急下結(jié)論,再看二個sql

select * from pre_request_logs_20180524 where port in (51161,48229);
select * from pre_request_logs_20180524 where port in (51161,20462);

執(zhí)行結(jié)果分別如下

可以看到第二條sql是用到了索引,二條sql的區(qū)別在于port值不一樣,一個包含48229,一個包含20462

其實MySQL優(yōu)化器會自動判斷in是否走二級索引,也就是port字段的索引

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • mysql查詢條件not in 和 in的區(qū)別及原因說明
  • MySQL全面瓦解之查詢的過濾條件詳解
  • mysql條件查詢and or使用方法及優(yōu)先級實例分析
  • 詳解Mysql查詢條件中字符串尾部有空格也能匹配上的問題
  • MySQL查詢條件常見用法詳解
  • mysql 帶多個條件的查詢方式

標(biāo)簽:臨汾 武威 白銀 湖北 云浮 烏海 聊城 湖南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《MySQL查詢條件中in會用到索引嗎》,本文關(guān)鍵詞  MySQL,查詢,條件,中,會,用到,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《MySQL查詢條件中in會用到索引嗎》相關(guān)的同類信息!
  • 本頁收集關(guān)于MySQL查詢條件中in會用到索引嗎的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章