[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