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没有索引呢?
可能结果就不一样了

相关文章:

  • 2021-07-31
  • 2021-11-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-17
  • 2021-10-14
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-07
  • 2021-11-15
  • 2021-12-05
相关资源
相似解决方案