[firebase-br] Socorro!! - Preciso melhorar esta query, Cantu, pode ser ? (Instrução SQL pra gente grande)

Suporte Técnico Orel suporte em orel.com.br
Qui Maio 5 09:42:43 -03 2005


Olá, Pessoal,  

A minha cabeça está a prémio, peço encarecidamente uma ajuda

Explicando:

1-) Fiz um teste com CAST e fica bem mais rápido.

2-) A primeira parte do select é instantânea, até o and not exists.

3-) Só para entender melhor, eu tenho uma tabela A (V_PACIENTE), a condição tem que ser a seguinte:

Só vir se encontrar algum registro em FU_EXPAC com a condição EX_STATUS = 2 ou 6, bom se tiver isso ai vamos para o segundo passo, que é em encontrado com EX_STATUS = 2 ou 6, ele NÃO pode ter NENHUM com o EX_STATUS = (0,1,3,4,8,13).  

Para ficar mais claro, o PACIENTE tem 4 exames, se 3 estiver prontos, ou seja com EX_STATUS = 2, mas 1 NÃO estiver pronto, ele NÃO TEM QUE VIR, só retornará na select quando o 4 exames ficar pronto, ou seja com EX_STATUS = 2 também.

A parte em AZUL funciona perfeitamente(muito rápida) , quando eu adiciona a parte em vermelho, que é a condição NEGATIVA, o troço senta.

NOTE: Pelo que percebi, primeiro ele faz uma leitura COMPLETA, e depois da primeira condição, ele vai re-ler TUDO novamente, acredito que tem que ser feito num único comando.

      select first 50 PAC.*
              from V_PACIENTE PAC
              where exists ( select first 1 1
                                           from FU_EXPAC
                                           where PAC.p_os = EX_OS and 
                                           cast(EX_STATUS as integer) in (2,6)
                                )
               and not exists
                                ( select first 1 1
                                           from FU_EXPAC
                                           where PAC.p_os = EX_OS and
                                           cast(EX_STATUS as integer) in (0,1,3,4,8,13)
                                )
                order by PAC.P_OS


Eduardo de Carvalho
Orel Consultoria Ltda - Fones: (11)6193-4049 - (11)9196-4243
E-mail : e.carvalho em orel.com.br   -    MSN Messenger : orel_carvalho
Visite  : www.orel.com.br



Mais detalhes sobre a lista de discussão lista