一尘不染

PostgreSQL:替代WHERE IN的地方WHERE NOT IN的地方

sql

我有几个语句可以访问非常大的Postgresql表,即:

SELECT a.id FROM a WHERE a.id IN ( SELECT b.id FROM b );
SELECT a.id FROM a WHERE a.id NOT IN ( SELECT b.id FROM b );

他们中的一些甚至以这种方式访问​​甚至更多的表。提高性能的最佳方法是什么,我应该切换即加入联接吗?

非常感谢!


阅读 148

收藏
2021-05-23

共1个答案

一尘不染

JOIN将更加高效,或者您可以使用EXISTS:

SELECT a.id FROM a WHERE EXISTS (SELECT 1 FROM b WHERE b.id = a.id)

子查询最多返回1行。

2021-05-23