Usuário com melhor resposta
Consulta com parâmetro - qual é mais rápido - ISNULL ou IS NULL

Pergunta
-
Turma,
Qual a diferença de performance entre os dois modelos abaixo:
1º Modelo - na clausula where utilizasse o ISNULL
SELECT * FROM Pessoas
WHERE
ID = ISNULL(@ID,ID) AND
Nome = ISNULL(@Nome,Nome) AND
SobreNome = ISNULL(@SobreNome,SobreNome) AND
Filhos = ISNULL(@Filhos,Filhos) AND
AnoNascimento = ISNULL(@AnoNascimento,AnoNascimento) AND
Cidade = ISNULL(@Cidade,Cidade) AND
UF = ISNULL(@UF,UF)
2º Modelo - utilizasse a coluna is null
SELECT * FROM Pessoas
WHERE
(ID = @ID OR @ID IS NULL) AND
(Nome = @Nome OR @Nome IS NULL) AND
(SobreNome = @SobreNome OR @SobreNome IS NULL) AND
(Filhos = @Filhos OR @Filhos IS NULL) AND
(AnoNascimento = @AnoNascimento OR @AnoNascimento IS NULL) AND
(Cidade = @Cidade OR @Cidade IS NULL) AND
(UF = @UF OR @UF IS NULL)Em termos de performance qual é o mais rápido e por quê?
Estou buscando uma forma de otimizar minhas sentenças SQL que estão dentro de SP, pois a ideia da empresa é retirar tudo de SP e passar para sentença pura dentro do código e eu não gostei desta ideia de forma alguma, pois ainda acredito que a SP dar muito mais mobilidade na correção/manutenção dos sistemas.
Valeu!
PS: exemplos retirado da página: http://gustavomaiaaguiar.wordpress.com/2011/05/19/consultas-parametrizadas-isnull-e-sql-dinmica/
Pablicio
Respostas
-
Pablício,
Em relação a performance isso é algo que temos que analisar de diversas formas, pois a IsNull é uma função que tem como finalidade analisar se o valor que esta sendo passado é nulo ou não.
Já o comando Is Null é um operador lógico condicional que tem a mesma finalidade, mais por se tratar de um operador tem um comportamento totalmente diferente.
No caso da sua empresa querer mudar tudo para o código dentro da aplicação sinceramente acho que isso é dar um tiro no próprio pé, pois a grande praticidade que as Stored Procedures oferecem, além da possibilidade de trabalhar diretamente na camada de dados, tendo ganhos de performance será totalmente descartada.
Eu não gosto deste tipo de cenário, onde para realizar uma simples alteração temos que acabar recompilando toda aplicação o que poderá representar um grande risco para o ambiente.Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Sugerido como Resposta Alexandre Matayosi quinta-feira, 3 de janeiro de 2013 16:30
Todas as Respostas
-
Pablício,
Em relação a performance isso é algo que temos que analisar de diversas formas, pois a IsNull é uma função que tem como finalidade analisar se o valor que esta sendo passado é nulo ou não.
Já o comando Is Null é um operador lógico condicional que tem a mesma finalidade, mais por se tratar de um operador tem um comportamento totalmente diferente.
No caso da sua empresa querer mudar tudo para o código dentro da aplicação sinceramente acho que isso é dar um tiro no próprio pé, pois a grande praticidade que as Stored Procedures oferecem, além da possibilidade de trabalhar diretamente na camada de dados, tendo ganhos de performance será totalmente descartada.
Eu não gosto deste tipo de cenário, onde para realizar uma simples alteração temos que acabar recompilando toda aplicação o que poderá representar um grande risco para o ambiente.Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Sugerido como Resposta Alexandre Matayosi quinta-feira, 3 de janeiro de 2013 16:30
-
-
Pablício,
Então tente relatar este cenário, expor os prós e contras deste tipo de mudança que é algo em determinandos momentos arriscado.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]