Eu tenho duas tabelas article e article_content no PostgreSQL, o article_id na tabela article_content era o id da tabela do artigo. Agora o sql está assim:
select *
from article_content ac
where article_id not in(
select id from article a
)
limit 10
encontre o registro em article_content que não existe em article. esta é a consulta simples:
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)
agora a tabela article e article_content têm tantas linhas. parece que este sql não pode ser concluído para sempre. o que devo fazer para remover as linhas de conteúdo do artigo que não existiam no artigo?
Normalmente NOT EXISTS é mais eficiente:
Um índice em
article_content (article_id)
melhorará o desempenho. Suponho que já exista um índice emarticle (id)