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
