MySQL中 in和exists的区别

A表: 100条数据 , B: 10条数据

select * from A where id in ( select aid from B )

先执行括号里面的查询,然后执行外面,总共需要查询的次数的 B+1=11次
需要注意的是 括号里面的查询会缓存到内存中

select * from A where exists ( select aid from B where aid=A.id )

先执行括号外面的查询,然后拿到外面的查询结果去执行括号里面的查询
总共查询的次数是 1+A=101次

得出的结论: 如果子查询数量少,用in,子查询数量达用 exists,也可以理解为先查询小的那个

这个结论也不是绝对的,还要考虑索引之类的优化,比如A小于B,按照上面的理论应该使用 exists,但是如果B有索引A没有索引呢?
可能结果就不一样了

上一篇:jQuery图片上传前先在本地预览


下一篇:MYSQL中IN与EXISTS的区别