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 对比分析】
下面分析它的执行原理(关于版本5.5和5.6的区别在文章后面会说):
对于in来

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

被折叠的 条评论
为什么被折叠?



