我相信很多人都受到过 in 与 exists 谁快谁慢的困扰。如果执行计划中没有产生 FILTER,那么我们可以参考以下思路:in 与 exists 是半连接,半连接也属于表连接,那么既然是表连接,我们需要关心两表的大小以及两表之间究竟走什么连接方式,还要控制两表的连接方式,才能随心所欲优化 SQL,而不是去记什么时候 in 跑得快,什么时候 exists 跑得快。如果执行计划中产生了 FILTER,大家还需阅读《子查询非嵌套》才能彻底知道答案。