2014-09-19 23:28 GMT-03:00 Wellington <wm...@yahoo.com.br>:

> 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
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a