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.
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
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.
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.