当前位置:网站首页>Mysql的in和exists用法区别
Mysql的in和exists用法区别
2022-08-03 07:40:00 【棒棒吃不胖】
一.构建模拟环境
表A有某学校所有学生的姓名
表B有某学校所有的班级
要求通过班级查询所有学生的姓名
二.比较
1)首先用in查询姓名
select * from A where name in (select name from B);
该命令等价于
先走子查询 select name from B;
再走A表 select * from A where A.name=B.name;
它相当于一个大循环,嵌套着里面的一个小循环
其中子查询为外部循环,主查询语句是内部的循环
可以看出:
内表的结果无论如何都需要遍历(外层循环),这是不可避免的。
所以子查询A小于B,使用in性能越好。
2)用exists查询姓名
select * from A where exists ( select 1 from B where A.name=B.name );
该命令等价于:
先走表A select * from A;
再走表B select * from B where A.name=B.name;
它也是一个大循环嵌套一个内循环
不过,此处表A查询是外循环
可以看出:
外层表(A)的结果无论如何都需要遍历(外层循环),这是不可避免的。
所以A数据量大于B,使用exists性能越好。
三.结论
当A是外层循环(必须遍历),B是内层循环
A数据量小于B数据量,用in
A数据量大于B数据量,用exists(此时B是外层循环)
一句话:选择外层循环表数据量小的。
边栏推荐
猜你喜欢

熊市中预言机,牛市中的战斗机,藏宝计划起飞,坐稳扶好!

《21天精通TypeScript-5》类型注解与原始类型

训练正常&异常的GAN损失函数loss变化应该是怎么样的

The use of the database table structure document generation tool screw

Evaluate: A detailed introduction to the introduction of huggingface evaluation indicator module

最佳高质量字体

Dapr 与 NestJs ,实战编写一个 Pub & Sub 装饰器

Logic Pro X自带音色库列表

PMP每日一练 | 考试不迷路-8.2(包含敏捷+多选)

学习笔记:机器学习之逻辑回归
随机推荐
Shell运维开发基础(一)
最佳高质量字体
熊市中预言机,牛市中的战斗机,藏宝计划起飞,坐稳扶好!
vs 2022无法安装 vc_runtimeMinmum_x86错误
Qt5开发从入门到精通——第二篇(控件篇)
volta管理node版本
解决GANs训练中模式崩塌/训练崩溃的十五个方法
使用pipreqs导出项目所需的requirements.txt(而非整个环境)
Pyspark - an empty string is replaced by None
Fortify白盒神器20.1.1下载及安装(非百度网盘)
Poke the myth of Web3?Poke the iron plate.
tmp
Haisi project summary
【云原生--Kubernetes】Pod容器与镜像拉取策略
数仓埋点体系与归因实践
【OpenCV】 - 显示图像API之imshow()对不同位深度(数据类型)的图像的处理方法
【Kaggle实战】泰坦尼克号生存人数预测(从零到提交到Kaggle再到模型的保存与恢复)
STL迭代器
information_schema
Roson的Qt之旅#105 QML Image引用大尺寸图片