[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