MYSQL中in的用法
工作原理
以如下SQL为例,分析in在嵌套查询语句中的工作原理:
SELECT * FROM A WHERE id IN (SELECT id FROM B);)
等价于:
- SELECT id FROM B ----->先执行in中的查询,并且缓存结果集;
- SELECT * FROM A WHERE A.id = B.id。
工作原理:缓存B中查询出来的id,A表查询时把A表的id与缓存数据比较,满足条件的数据加入结果集。
以上SQL语句中,in中的子查询语句仅仅执行一次,它查询出B中的所有的id并缓存起来,然后检查A表中的id在缓存中是否存在,如果存在则将A的当前记录加入到结果集中,直到遍历完A表中所有记录为止。
适用场景
从内外表数据量的大小视角剖析,B表数据比A表数据小,B表符合要求的数据都被缓存起来,A中每查询一次就与缓存中的数据比较一次。以下用遍历结果集的方式来分析IN查询:
private void search() {
List result = new ArrayList(); //结果集
String A[] = {"select * from A"}; // 存储从A表查询到的结果集
String B[] = {"select * from B"}; // 存储从B表查询到的结果集
for (String bValue : B) {
for (String aValue : A) {
if (aValue.equals(bValue)) {
result.add(aValue);
break;
}
}
}
System.out.println(result);
}
通过以上Java伪代码可以看出,当B表的数据较大时不适合使用in查询,因为它会遍历B表中的全部记录。
案例分析
1、A表中有100条记录,B表中有1000条记录,那么最多可能遍历1000*100次,效率很差;
2、A表中有1000条记录,B表中有100条记录,那么最多可遍历100*1000此,内循环次数减少,效率大大提升。
小结
IN查询适合B表数据量比A表数据量小的情况,并且是从缓存中取数据。
读后有收获,小礼物走一走,请作者喝咖啡。

作者:楼兰胡杨
本文版权归作者和博客园共有,欢迎转载,但请注明原文链接,并保留此段声明,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南