none
Subconsulta com CASE RRS feed

  • Pergunta

  • Ola pessoal

    Na seguinte consulta (exemplo):

    select 
    case when nt.Serie < 100 then nt.Serie 
    else (select s.Numero from  Series s where s.cod = nt.Serie) end
    from Notas nt

    Esta subconsulta no "else" de que forma interfere no plano de execução?

    O otimizador consegue identificar que "nunca vai entrar" nessa condição, por exemplo, e não considerar a leitura da tabela Series?


    Julio C.



    • Editado Julio Costi quarta-feira, 15 de maio de 2019 02:19
    quarta-feira, 15 de maio de 2019 02:18

Respostas

  • Julio,

    Sabendo que o comando Else representa para qualquer linguagem de programação, que caso qualquer condição imposta no Case não seja verdadeira ou satisfatória, a linguagem Transact-SQL vai reconhecer e trabalhar da mesma forma, o else somente será processado caso as condições do case não sejam satisfatórias.

    Agora identificar que nunca vai entrar neste condição não é bem assim.

    Eu particularmente falando não tenho o hábito de utilizar o Else justamente para evitar que o query processor tenha que analisar mais uma possível condição.

    Interferir diretamente no plano de execução, somente analisar o mesmo para afirmar, mas que ela vai interferir no processamento em tempo real vai.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta Julio Costi quinta-feira, 16 de maio de 2019 00:04
    quarta-feira, 15 de maio de 2019 17:45
  • Deleted
    • Marcado como Resposta Julio Costi quinta-feira, 16 de maio de 2019 00:05
    quarta-feira, 15 de maio de 2019 18:28

Todas as Respostas

  • Julio,

    Sabendo que o comando Else representa para qualquer linguagem de programação, que caso qualquer condição imposta no Case não seja verdadeira ou satisfatória, a linguagem Transact-SQL vai reconhecer e trabalhar da mesma forma, o else somente será processado caso as condições do case não sejam satisfatórias.

    Agora identificar que nunca vai entrar neste condição não é bem assim.

    Eu particularmente falando não tenho o hábito de utilizar o Else justamente para evitar que o query processor tenha que analisar mais uma possível condição.

    Interferir diretamente no plano de execução, somente analisar o mesmo para afirmar, mas que ela vai interferir no processamento em tempo real vai.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta Julio Costi quinta-feira, 16 de maio de 2019 00:04
    quarta-feira, 15 de maio de 2019 17:45
  • Deleted
    • Marcado como Resposta Julio Costi quinta-feira, 16 de maio de 2019 00:05
    quarta-feira, 15 de maio de 2019 18:28