SQL WHERE ID IN (id1, id2, ..., idn)
Necesito escribir una consulta para recuperar una gran lista de identificadores.
Somos compatibles con 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 INSELECT * 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 ORSELECT * 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 (id in myIdList)
{
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, mejor que muchas consultas pequeñas. Puede ser que esté equivocado
¿Cuál sería una solución correcta para este problema?