none
Consulta com parâmetro - qual é mais rápido - ISNULL ou IS NULL RRS feed

  • 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 NULLAND
        (Nome = @Nome OR @Nome IS NULLAND
        (SobreNome = @SobreNome OR @SobreNome IS NULLAND
        (Filhos = @Filhos OR @Filhos IS NULLAND
        (AnoNascimento = @AnoNascimento OR @AnoNascimento IS NULLAND
        (Cidade = @Cidade OR @Cidade IS NULLAND
        (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

    quinta-feira, 3 de janeiro de 2013 14:26

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]

    quinta-feira, 3 de janeiro de 2013 16:18

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]

    quinta-feira, 3 de janeiro de 2013 16:18
  • Concordo contigo quanto a decisão. 



    Pablicio

    quinta-feira, 3 de janeiro de 2013 17:29
  • 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]

    quinta-feira, 3 de janeiro de 2013 17:35