2010-03-11 18 views

Respuesta

4

No hay límite técnico, pero hay una cierta clase de 'buen sentido' límite ..

tener demasiado elementos en la cláusula IN significa la consulta tiene probablemente un mal diseño (en mi humilde opinión)

+0

Casi siempre puede reemplazar IN con una declaración JOIN, a menos que tenga la lista de una fuente externa (no SQL). –

+0

@sf: sí, totalmente de acuerdo. – Strae

+1

y si la lista es externa, siempre puede insertarla en una tabla temporal y luego hacer una combinación, lo que tal vez después de crear algunos índices podría ser un buen plan – araqnid

0

No, pero tenga cuidado al usar la instrucción IN. Si utiliza una subconsulta en su instrucción IN, el rendimiento puede verse negativamente afectado porque SQL Server debe generar el conjunto de resultados completo y, esencialmente, construir internamente una declaración IF potencialmente grande.

Por ejemplo, algo así como Select * From MyTable where MyColumn IN (Select myColumn from AnotherTable) puede ser algo lento si la subconsulta devuelve una gran cantidad de filas. Muchas veces es más eficiente usar EXISTS.

0

Estoy bastante seguro de que Postgres tiene un límite de 1000 ... pero no puedo encontrar ningún docco que lo soporte.

+0

Eso podría ser Oracle. –

7

El límite de 1000 en PostgreSQL no es un límite estricto, es un límite de optimización, es decir; después de 1000 PostgreSQL no lo maneja muy bien. Por supuesto, tengo que preguntar qué demonios estás haciendo con una cláusula IN de 1000 entradas.

2

Lo he usado, en consultas dinámicas creadas para postgres con sqlalchemy, con más de 25k parámetros. Además, se pasaron a las funciones de Python a través de parámetros posicionales (* args) ... pero no noté una desaceleración en mi caso. YMMV

Cuestiones relacionadas