Comentários
- Se houver realmente 800 cláusulas where, acho que você deveria trabalhar em seu aplicativo
Resposta
A maneira de escrever essa consulta é:
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
No entanto, a verdadeira questão é: onde veio essa lista de id
s? Se a lista de id
s for o resultado de outra consulta ao banco de dados, você deverá fazer uma subseleção ou uma junção.
Comentários
- Funcionou perfeitamente. Não foi a partir de uma consulta ao banco de dados, alguém realmente examinou e escolheu todos os números. Eu não os invejo.
Resposta
Um teste com EXPLAIN ANALYZE VERBOSE
mostrará que o formulário com id IN (...)
na resposta de @ 200_success é transformado internamente em:
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
.. que, portanto, tem um desempenho um pouco mais rápido no início (nenhuma conversão necessária).
Além disso, o formulário em sua pergunta terá um desempenho eficaz muito parecido.
Com listas grandes, desaninhar uma matriz , seguido por JOIN
geralmente será mais rápido :
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
Como a lista é is the result of another database query
, será mais rápido combinar os dois em um consulta com uma JOIN
.
Explicação mais detalhada:
Resposta
Para um único id, a seguinte consulta funcionou para mim:
SELECT * FROM member_copy WHERE id IN ("17579");
Comentários
- Você poderia explicar como isso responde ao OP?