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