MySQL搜寻条件中in会用到索引吗
发布时间:2022-03-17 04:57:14 所属栏目:MySql教程 来源:互联网
导读:当用人问你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字段的索引 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |