none
Consulta en 7 tablas RRS feed

  • Pregunta

  • Hola:

    Tengo una duda relacionada con el rendimiento. Tengo que realizar una consulta en la que están involucradas 7 tablas o incluso 8, ya que sus campos están relacionados entre sí. Una consulta con INNER JOIN supondría concatenar 6 INNER JOIN.

    Otra opciones es hacer la consulta a las tablas principales y después, mediante código (trabajo en C#) realizar las consultas que hagan falta para el resto de tablas. Hay cuatro tablas que son descriptivas por lo que sólamente tendré que obtener uno o dos campos por lo que serían 4 consultas por cada registro de la consulta principal.

    Que me aconsejais?


    jueves, 18 de noviembre de 2010 20:16

Respuestas

  • Si estás accediendo a SQL Server, no hay problema en hacer el join de las 7 tablas. Para comprobar cómo se interpreta, puedes pedir desde SQL Server Management Studio el Plan de Ejecución de la consulta (es uno de los iconitos que hay en la parte superior), y te saldrá un diagrama indicando cómo lo va a resolver. Si las tablas están bien diseñadas, y tienen índices adecuados, el join múltiple se resolverá con mucha eficiencia.

    Otra comprobación que puedes hacer es la de hacer desde SSMS un "SET STATISTICS IO ON" y ejecutar la consulta. Te responderá con el número de páginas a las que tiene que acceder, y verás que es bastante pequeño, si el diseño de tablas y de índices es bueno.

    Si finalmente decides resolverlo en cliente, no hagas 4 consultas, ya que esto será menos eficaz que el join. En lugar de eso, carga en memoria una sola vez las tablas descriptivas, y luego cuando consultes las tablas principales haz una búsqueda de las descripciones sobre las tablas descriptivas que ya tienes cargadas. Conviene usar algún mecanismo eficaz para estas búsquedas en memoria, tal como una tabla de hash. Pero esto solo tiene sentido si tienes que repetir miles y miles de consultas desde la parte cliente y los tiempos de respuesta son críticos. Si es para unas pocas consultas, es más simple y eficaz pedirle al servidor que haga el join de las 7 tablas.

    jueves, 18 de noviembre de 2010 20:48

Todas las respuestas

  • Si estás accediendo a SQL Server, no hay problema en hacer el join de las 7 tablas. Para comprobar cómo se interpreta, puedes pedir desde SQL Server Management Studio el Plan de Ejecución de la consulta (es uno de los iconitos que hay en la parte superior), y te saldrá un diagrama indicando cómo lo va a resolver. Si las tablas están bien diseñadas, y tienen índices adecuados, el join múltiple se resolverá con mucha eficiencia.

    Otra comprobación que puedes hacer es la de hacer desde SSMS un "SET STATISTICS IO ON" y ejecutar la consulta. Te responderá con el número de páginas a las que tiene que acceder, y verás que es bastante pequeño, si el diseño de tablas y de índices es bueno.

    Si finalmente decides resolverlo en cliente, no hagas 4 consultas, ya que esto será menos eficaz que el join. En lugar de eso, carga en memoria una sola vez las tablas descriptivas, y luego cuando consultes las tablas principales haz una búsqueda de las descripciones sobre las tablas descriptivas que ya tienes cargadas. Conviene usar algún mecanismo eficaz para estas búsquedas en memoria, tal como una tabla de hash. Pero esto solo tiene sentido si tienes que repetir miles y miles de consultas desde la parte cliente y los tiempos de respuesta son críticos. Si es para unas pocas consultas, es más simple y eficaz pedirle al servidor que haga el join de las 7 tablas.

    jueves, 18 de noviembre de 2010 20:48
  • Hola, gracias por la respuesta. Lo haré con el join. Creo que mis tablas están bastante bien diseñadas e indexadas asi que, como comentas, no debería haber problema.
    jueves, 18 de noviembre de 2010 21:00