MySQL系列-优化之精准解读in和exists

本文详细解析了MySQL中in和exists在查询时的差异,包括执行原理和效率分析。通过实践检验在MySQL 5.5版本中,in查询会被转化为exists,而在5.6及以上版本中行为有所不同。对于not in和not exists,推荐使用not exists以利用索引。此外,join可以作为in和exists的替代方案,有助于优化查询性能。
摘要由CSDN通过智能技术生成

1.解读in和exists

这两个关键字的区别主要是在于子查询上面,in是独立子查询,exists是相关子查询,例如:

用in查询有员工的部门       :select dept_name from dept where id in (select dept_id from emp);

用exists查询有员工的部门:select dept_name from dept where exists (select 1 from emp where dept.id=emp.dept_id);

当然,执行结果完全一致。

2.in和exists的效率问题

上面的SQL语句执行的完全结果一样,那么这两个的效率如何呢?

网上也是有很多文章进行解读,总的来说就是体现一种小数据集驱动大数据集的思想。很多文章是直接说小表驱动大表,其实这样是很不准确的,因为我们可以这样【select dept_name from dept where id in (select dept_id from emp where id>5;)】这样对于子查询来说他返回的结果集与他的表没太大关系了,所以小数据集驱动大的数据集是一种更精准的说法。参考【知乎 MySQL查询语句中的IN 和Exists 对比分析

下面分析它的执

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值