DESAFIO DO GORDO – Solução

E ai galera, tudo bem com vocês?

Antes de mais nada quero agradecer à todos que participaram do último DESAFIO DO GORDO e ressaltar que tivemos várias respostas corretas.

Agora vamos à resolução de mais um DESAFIO DO GORDO.

Como puderam perceber no script que faz a criação da tabela Aluno, a coluna NomeAlu possui uma restrição de nulabilidade, ou seja, não pode ser nula.

Ao realizar a pesquisa na tabela Aluno com o predicado WHERE NomeAlun IS NULL, temos uma contradição para o otimizador de consultas, pois essa coluna nunca poderá ser nula devido à restrição de nulabilidade.

Desta forma o otimizador de consultas do SQL Server não necessita de nenhum operador de pesquisa para resolver a consulta executada e utiliza o operador CONSTANT SCAN para indicar que as linhas retornadas serão sempre iguais ou constantes.

Espero que tenham gostado desse desafio e não deixem de inscrever-se no blog para receberem todos os novos posts.

Grande abraço.

Anúncios
  1. 13/05/2014 às 12:00

    Vitor, para complementar a sua resposta e a que dei no outro comentário, a fase de simplification é a fase 1 do processo de otimização onde na etapa
    contradiction detection é realizada a tentativa de encontrar contradições para salvar recursos (io,memória, cpu,etc.) usando o operador constant scan.

    No seu exemplo ele checou a nulabilidade, porém tem mais duas situações utilizadas por essa etapa dentro dessa fase: check constraints e contradição do próprio predicado. Veja dois exemplos sobre seu exemplo:

    Exemplo 1: ( check constraint )

    Adicionando um novo campo dataNascto datetime e uma check constraint ’01/01/2001′) vai ser detectado e utilizado o operador constant scan.

    Exemplo 2: contradição do predicado

    o select com esse predicado ( where dataNascto ’01/01/1991′ ) , não será necessário checar a constraint e será utilizado o operador constant scan.

    Abs.,

    Alexandre Araujo

  2. 13/05/2014 às 12:03

    O exemplo 1 saiu cortado , segue …

    Exemplo 1: ( check constraint )
    Adicionando um novo campo dataNascto datetime e uma check constraint ’01/01/2001′) vai ser detectado e utilizado o operador constant scan.

  3. 13/05/2014 às 12:07

    Exemplo 1: ( check constraint )
    Adicionando um novo campo dataNascto datetime e uma check constraint menor [01/01/2000], o select com esse predicado (where dataNascto maior [01/01/2001]) vai ser detectado e utilizado o operador constant scan.
    Exemplo 2: contradição do predicado
    o select com esse predicado ( where dataNascto menor [01/01/1990] and dataNAscto maior [01/01/1991] ) , ele nem precisa checar a constraint e dispara o constant scan.

  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: