加入收藏 | 设为首页 | 会员中心 | 我要投稿 核心网 (https://www.hxwgxz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MySQL搜寻条件中in会用到索引吗

发布时间:2022-03-17 05:09:08 所属栏目:编程 来源:互联网
导读:当用人问你MySQL 查询条件中 in 会不会用到索引,你该怎么回答? 答案:可能会用到索引 动手来测试下 1.创建一张表,给字段port建立索引 CREATE TABLE `pre_request_logs_20180524` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ip` char(16) NOT NULL COMMENT
      当用人问你MySQL 查询条件中 in 会不会用到索引,你该怎么回答?
      答案:可能会用到索引
      动手来测试下
 
1.创建一张表,给字段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 '状态',
 `create_time` datetime NOT NULL COMMENT '创建时间',
 `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请求日志';
插入测试数据
 
2.测试sql
explain select * from pre_request_logs_20180524 where port in (51161,20462,48229);
执行结果
 
从结果来看是没有用到索引,但不要着急下结论,再看二个sql
 
select * from pre_request_logs_20180524 where port in (51161,48229);
select * from pre_request_logs_20180524 where port in (51161,20462);
执行结果分别如下
 
可以看到第二条sql是用到了索引,二条sql的区别在于port值不一样,一个包含48229,一个包含20462
 
其实MySQL优化器会自动判断in是否走二级索引,也就是port字段的索引
 
总结
 
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值。

(编辑:核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读