J'ai besoin d'écrire une requête pour récupérer une grande liste d'identifiants.
Nous prenons en charge de nombreux backends (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ...) donc j'ai besoin d'écrire un SQL standard.
La taille de l'ensemble d'identifiants pourrait être importante, la requête serait générée par programme. Alors, quelle est la meilleure approche?
1) Ecrire une requête en utilisant IN
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
Ma question est ici. Que se passe-t-il si n est très grand? Et qu'en est-il des performances?
2) Ecrire une requête en utilisant OU
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
Je pense que cette approche n'a pas de limite n, mais qu'en est-il des performances si n est très grand?
3) Rédaction d'une solution programmatique:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
Nous avons rencontré des problèmes avec cette approche lorsque le serveur de base de données est interrogé sur le réseau. Normalement, il est préférable de faire une seule requête qui récupère tous les résultats plutôt que de faire beaucoup de petites requêtes. J'ai peut-être tort.
Quelle serait la bonne solution à ce problème?
IN
! J'ai fait le mien comme votre solution 1 + 3. Juste la requête finale était une longue chaîne de requête envoyée à SQL pour s'exécuter.