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 对比分析】
下面分析它的执