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