感觉现在的互联网应用中exist不是很常用,网上都说exist比in哟啊高,也具体没什么说怎么高?
exist 不一定比in效率高,二者差别是对索引的使用,exist使用的是子查询的表的索引,in使用的是外部主查询表的索引,无法利用子查询表的索引。
所以子查询表很大,用in就会全表扫描,性能很低。这时候用exist性能更好。
但如果子查询表比外部主查询的表小,用in反而性能更好。
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
不一定,只能说部分场景下是这样。
IN
是把外表和内表作 HASH JOIN;EXISTS
是对外表作 LOOP,每次循环再对内表进行查询。所以单从时间复杂度上看EXISTS
是要比IN
快。具体实例百度上一大把,不赘述了。
可以简单记为,
如果两个表差不多大,那么两个关键字差别不大;如果一个小表一个大表,则子查询大表用 EXISTS,子查询小表用 IN
。但要注意,无论何种情况,NOT EXISTS
都是要比NOT IN
快的,因为前者可以用到索引。