[firebase-br] Indices e nulos

Eduardo Pelizzari de Andrade eduardoandrade em persoft.com.br
Ter Maio 12 18:09:18 -03 2009


Vamos supor uma tabela chamada Pergunta, com um campo DataResposta, que 
só será preenchido quando é realizada a resposta para a pergunta. Por 
fim, ainda existe um índice apenas com o campo DataResposta.

Imaginando que rodo os seguintes comandos:

/* SQL 1: Para verificar pergunta respondida a partir de :data*/
Select * from Pergunta
where dataresposta >= :data
/* SQL 2:  Para verificar pergunta sem resposta */
Select * from Pergunta
where dataresposta is null
/* SQL 3: Para verificar pergunta sem resposta ou com resposta posterior 
a data informada  - Solução 1*/
Select * from Pergunta
where coalesce(dataresposta,:dataresposta)>=:dataresposta
/* SQL 4: Para verificar pergunta sem resposta ou com resposta posterior 
a data informada - Solução 2 */
Select * from Pergunta
where  dataresposta is null
union
Select * from Pergunta
where  dataresposta >= :dataresposta

O Firebird consegue fazer um bom uso do índice que contém o campo 
dataresposta em todas estes sql, em teste que fiz observei que o SQL 3 
ele não elege o índice, preferindo fazer a busca NATURAL. A dúvida é,  
ele consegue tratar bem valores de campos nulo, envolvendo índices?


-- 
Eduardo Pelizzari de Andrade
Persoft Softwares Aplicativos






Mais detalhes sobre a lista de discussão lista