Em 20/09/2014 14:34, "Matheus de Oliveira" <matioli.math...@gmail.com>
escreveu:
>
>
> 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.

Ops, na ânsia de querer ajudar fiz uma leitura péssima e não percebi a
cláusula. Boa explicação, Matheus.

---
Tiago J. Adami
Sent from GMail
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a