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 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 (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?

Respuestas a la pregunta(8)

Su respuesta a la pregunta