[firebase-br] Duvida Select
Rodrigo
firebase em dominioinf.com.br
Ter Set 9 12:26:36 -03 2014
Bom dia Sandro,
Muito obrigado pela resposta, funcionou muito melhor.
Entendo que seria muito melhor usar um generator, mas o cliente quer que
quando cancele um pedido, aquele numero seja recuperado
e usado em outro pedido.
Por isso isso dessa forma, ajudou muito
Grato,
Rodrigo
-----Mensagem Original-----
From: Sandro Souza
Sent: Tuesday, September 09, 2014 11:57 AM
To: FireBase
Subject: Re: [firebase-br] Duvida Select
Bom dia/tarde/noite Rodrigo.
Necessita realmente de uma tabela de números de pedido? Porque não utilizar
simplesmente uma sequence/gerador?
Bom, independente disso, você poderia testar o seguinte SELECT?
SELECT FIRST 1
A.NUMPEDIDO
FROM
NUMPEDIDOS A
WHERE
(A.USADO = '') AND
NOT EXISTS(SELECT B.NUMPEDIDO FROM PEDIDOS B WHERE B.NUMPEDIDO =
A.NUMPEDIDO);
Caso não haja um índice para a coluna USADO da tabela NUMPEDIDOS, crie-o,
como no exemplo abaixo:
CREATE INDEX IX_NUMPEDIDOS_USADO ON NUMPEDIDOS(USADO);
Acredito que já deva existir um índice para a coluna NUMPEDIDO da tabela
PEDIDOS, até porque eu imagino que seja a chave primária dessa tabela. Mas
caso ainda não haja, crie-o também.
Imagino também que você esteja preenchendo a coluna USADO da tabela
NUMPEDIDOS com algum valor assim que usa um dos números de pedido.
Ainda acho que seria muito melhor usar uma sequence ( = generator), mas
cada caso é um caso.
Espero ter ajudado mais que atrapalhado. :D
Em 9 de setembro de 2014 11:41, Rodrigo <firebase em dominioinf.com.br>
escreveu:
> Bom dia a todos.
>
> Fiz um select e ele esta funcionando, porém esta muito lento, pois ha
> muitos registros no banco de dados.
>
> select N.NUMPEDIDO AS NUMPEDIDO from numpedidos N where N.USADO = '' and
> (SELECT COUNT(*) FROM PEDIDOS WHERE NUMPEDIDO=N.NUMPEDIDO) = 0
>
> nesse select retorno o proximo numero de pedido, porem esse numero nao
> pode repetir na tabela pedidos, entao
> faço uma pesquisa para verificar se ele ja nao esta sendo usado. Percebi
> que nesses selects não usam os indices criados. Por isso talvez fique
> lento.
>
> Tentei fazer assim:
>
> select N.NUMPEDIDO AS NUMPEDIDO from numpedidos N where N.USADO = '' and
> N.NUMPEDIDO NOT IN (SELECT NUMPEDIDO FROM PEDIDOS)
>
> Funciona mais rapido porem nao retorna os mesmos resultados do que o outro
> select acima.
>
> Existe alguma forma de melhorar esse select, ou uma forma de ele usar os
> indices criados ?
>
> Grato
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa
Mais detalhes sobre a lista de discussão lista