Boa tarde galera.
Gostaria da ajuda de vocês para fazer a validação no where abaixo de forma mais performática
Hoje verifico se o parâmetro vem nulo ou se vêm preenchido com o campo da query.
Existe outra forma mais performática?
.
.
.
WHERE C.BLOQ = 0
AND (P_LOG IS NULL OR OP.LOG = P_LOG)
AND (P_ID_CLI IS NULL OR P_ID_CLI = 0 OR C.ID = P_ID_CLI)
AND (P_ID_CIDADE IS NULL OR P_ID_CIDADE = 0 OR P_ID_CIDADE = -1 OR CD.ID = P_ID_CIDADE)
AND (P_ID_REGIAO IS NULL OR P_ID_REGIAO = 0 OR P_ID_REGIAO = -1 OR RG.ID_REGIAO = P_ID_REGIAO);
Query de forma mais performática
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
OLá Moloukos,
geralmente o grande X da questão da performance das consultas é relacionamentos (índices).
Caso já esteja tudo ok com seus relacionamentos e o problema acontece quando você vai passar os parâmetros então deve-se focar realmente neles.
Precisa ver se realmente todos parâmetros podem ser nulos.
Não entendo porque você num mesmo parâmetro faz 4 validações: se null, se 0 , se -1, se igual ao campo. Muitos "OR" aninhados é bom indício de desempenho.
geralmente o grande X da questão da performance das consultas é relacionamentos (índices).
Caso já esteja tudo ok com seus relacionamentos e o problema acontece quando você vai passar os parâmetros então deve-se focar realmente neles.
Precisa ver se realmente todos parâmetros podem ser nulos.
Não entendo porque você num mesmo parâmetro faz 4 validações: se null, se 0 , se -1, se igual ao campo. Muitos "OR" aninhados é bom indício de desempenho.
-
- Rank: Programador Sênior
- Mensagens: 52
- Registrado em: Qui, 18 Set 2008 10:22 pm
- Localização: São Paulo - SP
Moloukos Rox
Daniel, entendo o que você diz sobre as validações se null, se 0 , se -1, se igual ao campo...
Na verdade a validação que queria melhorar era a da linha abaixo, onde posso receber o parâmetro null ou igual ao campo da tabela.
WHERE C.BLOQ = 0
AND (P_LOG IS NULL OR OP.LOG = P_LOG)
Queria uma maneira mais performatica de fazer essa parte da query
Na verdade a validação que queria melhorar era a da linha abaixo, onde posso receber o parâmetro null ou igual ao campo da tabela.
WHERE C.BLOQ = 0
AND (P_LOG IS NULL OR OP.LOG = P_LOG)
Queria uma maneira mais performatica de fazer essa parte da query
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes