Ok, veo tu dilema, y en la ausencia (presumiblemente de corta duración) de un experto en bases de datos, te daré mi opinión.
En aras de la cordura, divida sus datos. Digamos que estás almacenando información sobre personas. No necesita 200 columnas en 1 tabla. Debe dividirlos y tener varias columnas en muchas tablas. por ejemplo
tblGeneralCharacteristics:
- colEyeColor
- colHairColor
- colHeight
- colWeight
tblInterests:
- colFaveColor
- colFaveSport
tblRelationships
- colMother
- colFather
- colBrother
- colSister
De esta manera es mucho mejor. Computacionalmente dudo que importe mucho. Obviamente, con cada consulta obtiene menos datos, por lo que para algunos informes (donde es posible que no necesite obtener todos los datos o rastrear todos los datos) podría ser más rápido (aunque si indexa la base de datos correctamente, entonces no debería no será un problema).
En el próximo número. El de la cantidad de registros en la base de datos. Si 10,000 está empezando a ser un poco grande, es hora de comenzar a almacenar en caché.
Ahora, en lo que a mí respecta, no hay una forma correcta o incorrecta de almacenar datos en caché. Lo que necesitas es lo que necesitas. Entonces, por ejemplo, en su pregunta mencionó obtener alturas promedio por peso para registros ingresados entre enero y marzo de 2012. Bueno... podría escribir un script cron que calcule las alturas promedio por peso para todos los registros ingresados ese mes y almacena esto en una mesa diferente en alguna parte. Luego, cuando llegue a crear su informe, solo necesita obtener los valores de enero, febrero y marzo y promediarlos... eso es mucho más fácil. En lugar de hacer una consulta computacional en potencialmente miles de filas, está haciendo una consulta cron (que no importa cuánto tiempo tome) en un par de cientos de filas, y luego el informe real solo consulta 3 filas.
Otro truco es que cuantos más cálculos puedas hacer en SQL, mejor. Si desea promediar campos/registros, o sumar algo, envíelo con su consulta SQL. El servidor SQL hará el cálculo y devolverá el resultado, en lugar de devolverle grandes cantidades de datos para filtrar. Sé que esto no siempre es fácil/útil, pero cuanto más pueda hacer que SQL funcione, mejor.
Espero que esto ayude. Como dije, estoy seguro de que un experto en bases de datos está ansioso por brindarle algunos consejos más perspicaces. :)