Si está haciendo consultas min/max/avg, ¿prefiere usar tablas de agregación o simplemente consultar en un rango de filas en la tabla sin formato?Para agregar o no agregar, esa es la pregunta de diseño de esquema de base de datos
Esta es obviamente una pregunta muy abierta y no hay una respuesta correcta, así que estoy buscando las sugerencias generales de la gente. Supongamos que la tabla de datos sin formato consta de una marca de tiempo, una clave externa numérica (por ejemplo, una identificación de usuario) y un valor decimal (por ejemplo, una cantidad de compra). Además, supongamos que hay millones de filas en la tabla.
He hecho ambas cosas y estoy desgarrado. Por un lado, las tablas de agregación me han dado consultas significativamente más rápidas, pero a costa de una proliferación de tablas adicionales. La visualización de los valores actuales para un rango agregado requiere volver a la tabla de datos sin formato o combinar agregaciones más finas. He encontrado que hacer un seguimiento en el código de la aplicación de la tabla de agregación para consultar cuándo es más trabajo que usted pensaría y que los cambios de esquema serán necesarios, ya que los intervalos de agregación originales invariablemente no serán suficientes ("Pero yo quería ver nuestras ventas en los últimos 3 períodos de pago! ").
Por otro lado, las consultas a partir de los datos brutos pueden ser terriblemente lentas, pero me permite ser muy flexible con respecto a los rangos de datos. Cuando cambian los límites del rango, simplemente cambio una consulta en lugar de tener que volver a generar las tablas de agregación. Del mismo modo, el código de la aplicación requiere menos actualizaciones. Sospecho que si fuera más inteligente sobre mi indexación (es decir, siempre tuviera buenos índices de cobertura), sería capaz de reducir la penalidad de seleccionar a partir de los datos en bruto, pero eso no es una panacea.
¿De todos modos puedo tener lo mejor de ambos mundos?
¿Para qué base de datos es esto? –
Normalmente uso MySQL pero espero que las sugerencias de las personas se apliquen a todas las bases de datos SQL. – pr1001
@ pr1001: es un problema general hasta cierto punto, pero algunas bases de datos ofrecen mecanismos para facilitar este problema (por ejemplo, las "vistas materializadas" de Oracle), por lo que este "derecho" va a ser específico de la base de datos hasta un grado – skaffman