Necesito escribir una consulta para recuperar una gran lista de identificadores.
Admitimos muchos backends (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ...), así que necesito escribir un SQL estándar.
El tamaño del conjunto de identificación podría ser grande, la consulta se generaría mediante programación. Entonces, ¿cuál es el mejor enfoque?
1) Escribir una consulta usando IN
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
Mi pregunta aquí es. ¿Qué pasa si n es muy grande? Además, ¿qué pasa con el rendimiento?
2) Escribir una consulta usando OR
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
Creo que este enfoque no tiene límite n, pero ¿qué pasa con el rendimiento si n es muy grande?
3) Escribir una solución programática:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
Experimentamos algunos problemas con este enfoque cuando se consulta el servidor de la base de datos a través de la red. Normalmente es mejor hacer una consulta que recupere todos los resultados en lugar de hacer muchas consultas pequeñas. Puede ser que esté equivocado.
¿Cuál sería una solución correcta para este problema?
IN
! Hice la mía como su solución 1 + 3. Solo la consulta final fue una, cadena de consulta larga enviada a SQL para ejecutar.