Ok, eu vejo seu dialema, e na (presumivelmente de curta duração) ausência de um especialista em banco de dados, eu lhe darei minha opinião.
Por uma questão de sanidade, divida seus dados. Digamos que você esteja armazenando informações sobre pessoas. Você não precisa de 200 colunas em 1 tabela. Você deve dividi-los e ter várias colunas em muitas tabelas. por exemplo.
tblGeneralCharacteristics:
- colEyeColor
- colHairColor
- colHeight
- colWeight
tblInterests:
- colFaveColor
- colFaveSport
tblRelationships
- colMother
- colFather
- colBrother
- colSister
Desta forma é muito melhor. Computacionalmente, duvido que isso importe muito. Obviamente, com cada consulta você está recebendo menos dados de volta, então para alguns relatórios (nos quais você pode não precisar obter todos os dados ou vasculhar todos os dados) pode ser mais rápido (embora, se você indexar o banco de dados corretamente, deva não seja um problema).
Para a próxima questão. O da quantidade de registros no banco de dados. Se 10.000 está começando a ficar um pouco grande, é hora de começar a armazenar em cache.
Agora, no que me diz respeito, não há maneira certa ou errada de armazenar dados em cache. O que você precisa é o que você precisa. Por exemplo, em sua pergunta você mencionou obter alturas médias para peso para entrada de registros entre janeiro e março de 2012. Bem... você poderia escrever um script cron que calcula as alturas médias para peso para todos os registros de entrada naquele mês e armazena isso em uma tabela diferente em algum lugar. Então, quando você for criar seu relatório, você só precisa obter os valores de janeiro, fevereiro e março e fazer a média deles... isso é muito mais fácil. Em vez de fazer uma consulta computacional em potencialmente milhares de linhas, você está fazendo uma consulta cron (que não importa quanto tempo demore) em algumas centenas de linhas e, em seguida, o relatório real consulta apenas 3 linhas.
Outro truque é que quanto mais cálculos você puder fazer no SQL, melhor. Se você deseja calcular a média de campos/registros ou totalizar algo, envie-o com sua consulta SQL. O servidor SQL fará o cálculo e retornará o resultado, em vez de retornar grandes quantidades de dados para peneirar. Eu sei que isso nem sempre é fácil/útil, mas quanto mais você conseguir que o SQL faça melhor.
Espero que isto ajude. Como eu disse, tenho certeza de que um especialista em banco de dados está ansioso para lhe dar alguns conselhos mais perspicazes. :)