Em vs qualquer operador no PostgreSQL
Qual é a diferença entre IN
e ANY
operador em PostgreSQL?
O mecanismo de funcionamento de ambos parece ser o mesmo. Alguém pode explicar isto com um exemplo?
1 answers
Logicamente, citando o manual:
Mas há dois variantes de sintaxe de
IN
é equivalente a= ANY
.
IN
e duas variantes da construção ANY
. Detalhes:
A IN ()
variante a tomar um conjunto é equivalente a = ANY()
tomar um conjunto , como demonstrado aqui:
Mas a segunda variante de cada uma é Não equivalente à outra. A segunda variante da construção ANY
tem um array (deve ser um tipo de array real), enquanto a segunda variante de IN
tem uma lista de Valores separada por vírgulas. Isso leva a diferentes restrições em valores de passagem e também pode levar a diferentes planos de consulta em especial casos:
- índice não utilizado com
=any()
mas utilizado comin
- passar vários conjuntos ou conjuntos de valores a uma função
A construção ANY
é muito mais versátil, pois pode ser combinada com vários operadores, não apenas =
. Por exemplo:LIKE
:
SELECT 'foo' LIKE ANY('{FOO,bar,%oo%}');
Para um grande número de valores, fornecendo um conjunto escalas melhores para cada:
Relacionado: