2010-06-30 20 views
6

Me parece que estoy usando muchas consultas de combinación, especialmente para obtener estadísticas sobre operaciones de usuario de mi base de datos. Las consultas de este tipo no son infrecuentes:Unir consultas y cuando es demasiado

from io in db._Owners where io.tenantId == tenantId 
    join i in db._Instances on io.instanceId equals i.instanceId 
    join m in db._Machines on i.machineId equals m.machineId 
    select ... 

Mi aplicación aún no está activo, por lo que no tengo manera de juzgar si estas consultas serán computacionalmente prohibitivo en la vida real. Mi consulta:

  1. ¿Hay un límite cuando hacer demasiadas 'combinaciones' es demasiado, y se puede describir sin obtener estadísticas de funcionamiento de la vida real?
  2. ¿Cuáles son mis alternativas? Por ejemplo, ¿es mejor simplemente crear tablas adicionales para guardar estadísticas que estoy actualizando a medida que avanzo, en lugar de juntar diferentes fuentes de tabla cada vez que quiero estadísticas?
+3

Las uniones de tres vías no son inusuales. Las aplicaciones del mundo real pueden ser mucho más grandes que eso, fácilmente. –

+1

Las respuestas que está recibiendo suponen que estas uniones se están ejecutando dentro de SQL. Al trabajar con LinqToSql, es importante que verifique las consultas reales enviadas para asegurarse de que no haya levantado inadvertidamente el procesamiento al cliente. – hemp

Respuesta

13

Si no tiene información de rendimiento, entonces no optimice.

La optimización prematura es la raíz de todos los males.

1) No creo que alguna vez llegue al "límite". 2) Esto se llama denomalización, la desnormalización prematura es solo un esfuerzo desperdiciado si no sabes si existe un problema.

Diría que su consulta se ve bastante normal.

0

1) ¿Hay un límite a al hacer demasiados 'une' es demasiado

No, el número de combinaciones no es un problema tanto como la estructura de los datos dentro de cada tabla, presencia y uso de índices y lo que se necesita hacer para obtener datos.

Los datos normalizados son comúnmente un objetivo principal en el diseño de bases de datos relacionales. Por lo general, considera la desnormalización como un medio para optimizar las consultas solo cuando sea necesario debido al esfuerzo adicional requerido para mantener la consistencia de los datos.

Si realmente está preocupado, publique su modelo de datos ERD (tablas de la base de datos & cómo se relacionan) y la base de datos que está utilizando para el proyecto (porque no todas las bases de datos son iguales).

+0

@Ponies: por curiosidad, ¿por qué marcó su respuesta como wiki? –

+1

@Ken: ¡Para poder editarlo, por supuesto! – hemp

+1

Ponies lo configura; el cáñamo lo lleva a casa. –

0

A menos que tenga un tráfico muy alto y los índices estén correctamente configurados, etc., no debería tener problemas.

Para informes/análisis, algunos lugares crearán un data warehouse que en su forma más básica es una copia [parcialmente] desnormalizada de su base de datos principal. Son más fáciles de informar ya que una tabla generalmente contiene la mayoría, si no todos, los datos necesarios en un informe. También pueden ser mucho más rápidos de leer, ya que no tiene que unirse tanto. Sin embargo, requerirán más espacio en disco (datos duplicados). Si se permiten escrituras, serán más lentas (tendrán que actualizar todos los datos duplicados) y tendrá el problema de mantener la coherencia de los datos duplicados.

En otras palabras, a menos que solo esté haciendo informes (o acceso de solo lectura), conserve las uniones.