Select muito demorado!

1. Select muito demorado!

Lucas
lvr123321

(usa Mandrake)

Enviado em 18/01/2008 - 16:13h

Ola, eu sou leigo no Postgresql, tenho pouca experiencia. Tenho um SELECT que demora uma eternidade para retornar os registros. Gostaria que alguem me desse uma idea do que poderia ser feito p/ melhorar ele.

Desde ja agradeço a atencao de todos.

#SELECT produto.id, produto.codbarra, modelo.descricao, modelo.referencia, cor.descricao, fornecedor.nome_fantasia where fornecedor.id = (select modelo.fornecedor_id where modelo.id = (select modelo_variacao.id where modelo_variacao.id = (select produto.modelo_variacao_id) )) and cor.id = (select produto.cor_id );


  


2. Re: Select muito demorado!

Alexandre Carrera
AleCarrera

(usa Suse)

Enviado em 19/01/2008 - 11:32h

Cara, que query loca, tenda criar uns índices. Não sei o que exatamente você sabe fazer e nem eu manjo muito mas acho que se você fizesse uma view seria mais rápido.
valeu.


3. Re: Select muito demorado!

Poleto
poleto

(usa Ubuntu)

Enviado em 20/01/2008 - 20:55h

Cara, você está fazendo um monte de sub selects, e isso aumenta o tempo de execução, pois várias queries são executadas.

O ideal seria que estas tabelas tivessem relacionamento entre si, e ao invés de fazer sub selects, você faria um join, o que é bem mais rápido.

Abraços,
Poleto


4. Re: Select muito demorado!

Perfil removido
removido

(usa Nenhuma)

Enviado em 20/01/2008 - 22:43h

Estudar um pouco mais sobre modelagem de dados e modelagem relacional também vai ajudar...

Acho que falta um pouco mais de base sobre bancos de dados e não conhecimento sobre a utilização da ferramenta...

Link:
http://pt.wikipedia.org/wiki/Modelo_relacional

Desculpe se pareci estupido!


5. É óbvio que essa consulta demora

Keylly Eyglys
eyglys

(usa Ubuntu)

Enviado em 20/01/2008 - 23:34h

Kra,
Concordo com a galera de que você precisa estudar modelagem e aquisição de dados.
O que estou mais surpreso é disto ter rodado.
Quando você deseja obter um dado você manda traze-lo de algum lugar (informando na cláusula FROM, que não está especificado no seu SQL).

Sua consulta me pareceu um quebra-cabeça com algumas peças faltando, mas eu acho que poderia re-escreve-la mais ou menos assim:

SELECT
produto.id, produto.codbarra, modelo.descricao, modelo.referencia, cor.descricao, fornecedor.nome_fantasia
FROM produto
INNER JOIN fornecedor ON (forcenedor.id = modelo.fornecedor_id)
INNER JOIN modelo ON (modelo.id = modelo_variacao.id)
INNER JOIN modelo_variacao ON (modelo_variacao.id = produto.modelo_variacao_id)
INNER JOIN cor ON (cor.id = produto.cor_id)

A consulta acima ainda iria retornar um resultado inesperado (como mencionei, o quebra-cabeça está com peças faltando), principalmente porque não sei qual é a cardinalidade do relacionamento entre as tabelas.

Mas, espero ter te dado uma luz e que o exemplo acima te ajude a escrever a consulta correta.

Att.
Keylly Eyglys.


6. Resolvido

Lucas
lvr123321

(usa Mandrake)

Enviado em 21/01/2008 - 11:19h

Valew galera, vc's me deram uma excelente ajuda,
muito obrigado. Vou seguir o conselho e estudar mais :D, segue abaixo o comando:

SELECT produto.id, produto.codbarra, modelo.descricao, modelo.referencia, cor.descricao, fornecedor.nome_fantasia
FROM produto
INNER JOIN cor ON cor.id = produto.cor_id
INNER JOIN modelo_variacao ON modelo_variacao.id = produto.modelo_variacao_id
INNER JOIN modelo ON modelo.id = modelo_variacao.id
INNER JOIN fornecedor ON fornecedor.id = modelo.fornecedor_id
;

Mais uma vez, muito obrigado a todos!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts