Boa tarde!

Estou com um problema de performance em uma query, talvez alguém possa me
ajudar!

Situação:

Postgres 9.1
Tabela produtos (id, nome)
Tabela bad_words (id, word)

Preciso basicamente selecionar todos os registros de products, removendo os
produtos cujo nome possui alguma palavra listada na tabela bad_words.

Uma query para realizar isso, não é complexa... Daria pra fazer assim:

SELECT
   p.id,
   p.name
FROM
   products p
   LEFT JOIN bad_words bw ON p.name ~* bw.word
WHERE
   bw.id IS NULL

Acredito que meu problema seja no número de cruzamentos realizados. Minha
tabela de produtos, atualmente está com 200.000 registros, e a previsão é
aumentar até 7.000.000 nos próximos meses. A tabela bad_words atualmente
possui em torno de 400 registros.

Rodando a consulta acima, o processamento leva em torno de 20 minutos
(Intel i5 2.9ghz, 8gb ram, hd 7200rpm), inviável para a aplicação...

Sei que milagres não existem, mas acredito que haja algum modo de indexar
os valores envolvidos nesta consulta, ou melhorar a query, com a finalidade
de diminuir o tempo total. Alguém tem alguma ideia?

Agradeço pela ajuda!
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a