Em 28 de novembro de 2013 14:00, Pedro Cavalheiro <[email protected]>escreveu:

> 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
>
>
ola..
amigo, poderia postar um explain e a ddl das tabelas?
tentou utilizar um in ou exists?


-- 

Douglas Fabiano Specht
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a