Commentaires
- Sil y a vraiment 800 clauses where, je pense que vous devriez travailler sur votre application
Réponse
La façon décrire cette requête est:
SELECT * FROM member_copy WHERE id IN (17579, 17580, 17582);
Cependant, la vraie question est, où doù vient cette liste de id
? Si la liste des id
est le résultat dune autre requête de base de données, alors vous devriez faire une sous-sélection ou une jointure à la place.
Commentaires
- a parfaitement fonctionné. Ce nétait pas à partir dune requête de base de données, quelquun est passé par là et a choisi chaque numéro. Je ne les envie pas.
Réponse
Un test avec EXPLAIN ANALYZE VERBOSE
vous montrera que le formulaire avec id IN (...)
dans la réponse de @ 200_success est transformé en interne en:
SELECT * FROM member_copy WHERE id = ANY ("{17579, 17580, 17582}");
.. qui fonctionne donc légèrement plus vite au début (aucune conversion nécessaire).
De plus, le formulaire de votre question fonctionnera efficacement très similaire.
Avec de grandes listes, désemboîter un tableau , suivi dun JOIN
sera généralement plus rapide :
SELECT m.* FROM unnest("{17579, 17580, 17582}"::int[]) id JOIN member_copy m USING (id);
Puisque la liste est is the result of another database query
, il sera plus rapide de combiner les deux en un avec une JOIN
.
Explication plus détaillée:
Réponse
Pour un identifiant unique, la requête suivante a fonctionné pour moi:
SELECT * FROM member_copy WHERE id IN ("17579");
Commentaires
- Pourriez-vous expliquer comment cela répond au PO?