我在PostgreSQL中有两个表article和article_content,表article_content中的article_id是文章表id。现在sql看起来像这样:
select *
from article_content ac
where article_id not in(
select id from article a
)
limit 10
在 article_content 中查找文章中不存在的记录。这是简单的查询:
Limit (cost=1000.00..44996.68 rows=1 width=415)
-> Gather (cost=1000.00..38955542254.16 rows=885420 width=415)
Workers Planned: 2
-> Parallel Seq Scan on article_content ac (cost=0.00..38955452712.16 rows=368925 width=415)
Filter: (NOT (SubPlan 1))
SubPlan 1
-> Materialize (cost=0.00..101153.51 rows=1775167 width=8)
-> Seq Scan on article a (cost=0.00..85342.67 rows=1775167 width=8)
现在表 article 和 article_content 有这么多行。似乎这个 sql 无法永远完成。我应该怎么做才能删除文章中不存在的文章内容行?
通常 NOT EXISTS 更有效:
一个索引
article_content (article_id)
将提高性能。我假设已经有一个索引article (id)