MySQL查询条件中in会用到索引吗
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,当用人问你MySQL 查询条件中 in 会不会用到索引,你该怎么回答?答案:可能会用到索引动手来测试下1.创建一张表,给字段port建立索引CREATE TABLE `pre_request_logs
千家信息网最后更新 2025年11月14日MySQL查询条件中in会用到索引吗
当用人问你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请求日志';插入测试数据
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);
执行结果

从结果来看是没有用到索引,但不要着急下结论,再看二个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字段的索引
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。
成功
索引
结果
测试
内容
字段
代理
学习
条件
查询
着急
也就是
价值
口号
就是
数据
日志
时间
状态
答案
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
国家电网公司网络安全大学
学软件开发可以做啥
新浪nba手机网数据库
mysql数据库定义
广州诗悦网络技术有限公司
上海振华重工软件开发
徐州地铁信息与网络安全
北京网络安全工程师王鑫简历
代理服务器设怎么配置
计算机网络安全章节选择题
北京贷搜搜网络技术有限公司
中小企业服务器可以做双机热备吗
中学生预防网络安全的措施
世界第一数据库宣布独立
做网游的服务器
徐州网络安全插画
方舟进化服务器多少钱
服务器上的硬盘支持热插拔吗
网络安全责任制明确化
久黎网络技术有限公司
温州找软件开发
华为信息与网络技术学院在哪里
数据库查询图形图像专业学生信息
华为服务器红灯h01
阿波老师网络安全
触漫服务器一直升级
4g网络技术是哪国研发的
北京亚控科技软件开发怎么样
数据库自动建立
克拉玛依存储服务器维保