SQL where ID IN (id1, id2, ..., idn)

J'ai besoin d'écrire une requête pour récupérer une grosse liste d'id.

Nous soutenons plusieurs backends (MySQL, Firebird, sql server, Oracle, PostgreSQL ...) donc j'ai besoin d'écrire un standard SQL.

La taille de la pièce d'identité peut être grande, la requête serait généré par programme. Alors, quelle est la meilleure approche?

1) l'Écriture d'une requête à l'aide de

SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)

Ma question ici est de. Ce qui se passe si n est très grand? Aussi, ce sujet de la performance?

2) l'Écriture d'une requête à l'aide de OU

SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn

Je pense que cette approche n'a pas de n limite, mais que dire de la performance si n est très grand?

3) l'Écriture d'une solution de programmation:

  foreach (id in myIdList)
  {
      item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
      myObjectList.Add(item);
  }

Nous avons connu quelques problèmes avec cette approche lorsque le serveur de base de données est interrogée sur le réseau. Normalement est préférable de faire une requête qui récupère tous les résultats, mieux que beaucoup de petites requêtes. Peut-être que je me trompe.

Ce serait une bonne solution pour ce problème?

  • Option 1 réduit de manière significative le serveur SQL temps de réponse, la sélection de 7k ID, dont certains n'existaient pas. Normalement, la requête a pris environ 1300ms, il se réduit à 80ms à l'aide de IN ! J'ai fait le mien en tant que votre solution 1 + 3. Juste la dernière question était une, longue chaîne de requête envoyée à SQL à exécuter.