2014-09-19 23:28 GMT-03:00 Wellington <[email protected]>:
> em uma tabela foi criado um indice assim: "campo = false".
>
> Quando eu rodo a consulta selecionando "campo is false", o indice nao é
> utilizado.
> O indice so é utilizado se seleciono "campo = false".
> Alguem saberia me explicar por que isso acontece ?
>
O operador IS e o operador de igualdade não são equivalentes. O operador de
igualdade considera valores iguais mas retorna NULL caso um dos operandos
seja NULL, já o IS considera exatamente iguais ignorando valores nulos,
como se NULL fosse um terceiro valor possível (e.g. no caso retorna FALSE
caso "campo" seja NULL ou TRUE, e TRUE caso o campo seja FALSE).
Para exemplificar, veja:
postgres=# SELECT false IS false, null::boolean IS false, false =
false, null::boolean = false;
?column? | ?column? | ?column? | ?column?
----------+----------+----------+----------
t | f | t | (null)
(1 row)
Para índices parciais, sempre tente casar exatamente igual.
Atenciosamente,
--
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral