2012-08-14 44 views
6

que he leído sobre el 61 table join limit en MySQL 5, pero no estoy seguro de cómo se aplicaría a los siguientes iniciales:¿El límite en el número máximo de tablas de unión SQL se aplica a toda la consulta, o las subconsultas se cuentan por separado?

SELECT * FROM (

    SELECT * FROM tableA JOIN // Lots of other joins here... 

    UNION 

    SELECT * FROM tableB JOIN // Lots of other joins here... 

    UNION 

    SELECT * FROM tableC JOIN // Lots of other joins here... 

    // etc... 
) 

¿Me alcanzado el límite con 61 mesas en total a través de todas las subconsultas, o le ¿será 61 por subconsulta UNIONed?

Esto varía en DBs, p. Ej. PostgreSQL, MSSQL, Oracle?

+0

Sí, no me gusta mucho, pero el problema me obliga (recopilar envíos de estudiantes sin marcar de muchos tipos diferentes y agruparlos por supuesto). Anteriormente mantenía las subconsultas UNION livianas y realizaba cualquier filtrado, p. "es el alumno en una clase que el usuario realmente enseña" en la parte externa, pero el rendimiento es pobre y necesito obtener esas cosas como JOINs directos, lo que significa que deben duplicarse para cada subconsulta de UNIÓN. Parece que MySQL no optimiza muy bien las subconsultas :( –

+0

Sí, el límite es diferente en diferentes bases de datos. Sin embargo, en cualquier base de datos, si estás contra el límite, entonces realmente necesitas reconsiderar tu diseño. No estoy seguro sobre mysql pero en el servidor SQl esas uniones en la unión contarían para el total – HLGEM

+0

@HLGEM. Gracias. Me gustaría rediseñar el esquema, pero no tengo control sobre eso ya que estoy haciendo un complemento para un gran proyecto de código abierto. –

Respuesta

3

Parece ser 61 por subconsulta. Aquí hay un violín que demuestra esto.

http://sqlfiddle.com/#!2/2b219/5

que tienen una sencilla tabla con una fila:

id | value 
1  | testvalue 

La primera consulta es sólo la tabla.

La segunda consulta se une a la tabla consigo mismo 61 veces. Funciona bien.

La tercera consulta tiene una subconsulta que contiene 61 uniones, que a su vez se une con la tabla una vez más. Funciona bien.

La cuarta consulta se une a la tabla 62 veces. Falla.

0

Sí, se aplica a toda la consulta. Me he encontrado con esto. En SQL 2005 el límite fue 256. Acabamos de actualizar a 2008 y no estoy seguro de si hay un límite. Consulte los límites oficiales aquí: http://msdn.microsoft.com/en-us/library/ms143432.aspx Sin embargo, lo mejor es dividir la consulta en dos o cambiar la forma en que está escrita.

+0

A medida que su enlace apunta, el número (de tablas por instrucción SELECT) en 2008 y versiones más recientes está limitado solo por "recursos disponibles". –

Cuestiones relacionadas