我有一个 PostgreSQL 函数,可以非常快速地将查询结果返回到 pgadmin 的结果网格中。在内部,这是一个简单的函数,它使用
dblink
连接到另一个数据库并执行查询返回,因此我可以轻松运行该函数。SELECT * FROM get_customer_trans();
它运行起来就像一个基本的表查询。
问题出现在我使用 NOT IN
子句时。所以我想运行以下查询,但它需要很长时间:
SELECT * FROM get_customer_trans()
WHERE user_email NOT IN
(SELECT do_not_email_address FROM do_not_email_tbl);
如何加快速度?这种情况下有没有比NOT IN
子句更快的方法?
SELECT * from get_customer_trans()
可以迅速地将所有220万条记录返回到查询结果网格中。因此,这个函数看起来很快。我想通过获取那些不在do_not_email_tbl表中的客户来进一步过滤结果。 - Horse Voicenot exists
足够聪明,可以暗示limit 1
。 - Clodoaldo NetoLIMIT 1
是不必要的。(not) exists
子查询计算出一个布尔值;要么存在一行或多行,要么不存在。无论哪种情况,子查询的结果都是true或false。 - wildplasser