exist 比in效率高吗?

感觉现在的互联网应用中exist不是很常用,网上都说exist比in哟啊高,也具体没什么说怎么高?

阅读 3.2k
2 个回答

不一定,只能说部分场景下是这样。

IN 是把外表和内表作 HASH JOIN;EXISTS 是对外表作 LOOP,每次循环再对内表进行查询。所以单从时间复杂度上看 EXISTS 是要比 IN 快。

具体实例百度上一大把,不赘述了。

可以简单记为,如果两个表差不多大,那么两个关键字差别不大;如果一个小表一个大表,则子查询大表用 EXISTS,子查询小表用 IN。但要注意,无论何种情况,NOT EXISTS 都是要比 NOT IN 快的,因为前者可以用到索引。

exist 不一定比in效率高,二者差别是对索引的使用,exist使用的是子查询的表的索引,in使用的是外部主查询表的索引,无法利用子查询表的索引。

所以子查询表很大,用in就会全表扫描,性能很低。这时候用exist性能更好。

但如果子查询表比外部主查询的表小,用in反而性能更好。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题