Добре, виждам диалемата ви и при (вероятно краткотрайна) липса на експерт по база данни ще ви дам мнението си.
В името на здравия разум разбийте данните си. Да приемем, че съхранявате информация за хора. Нямате нужда от 200 колони в 1 таблица. Трябва да ги разделите и да имате няколко колони в много таблици. напр.
tblGeneralCharacteristics:
- colEyeColor
- colHairColor
- colHeight
- colWeight
tblInterests:
- colFaveColor
- colFaveSport
tblRelationships
- colMother
- colFather
- colBrother
- colSister
Този начин е много по-добър. Изчислително се съмнявам, че има голямо значение. Очевидно с всяка заявка получавате по-малко данни обратно, така че за някои отчети (където може да не е необходимо да получавате всички данни или да преглеждате всички данни) може да е по-бързо (въпреки че ако индексирате базата данни правилно, тогава не трябва не е проблем).
Към следващия брой. Това на количеството записи в базата данни. Ако 10 000 започват да стават малко големи, време е да започнете кеширането.
Сега, що се отнася до мен, няма правилен или грешен начин за кеширане на данни. Това, от което се нуждаете, е това, от което имате нужда. Така например, във вашия въпрос споменахте получаването на средна височина за тегло за въвеждане на записи между януари и март 2012 г. Е... можете да напишете cron скрипт, който изчислява средните височини за тегло за всички въведени записи през този месец и съхранява това в друга маса някъде. След това, когато дойдете да създадете своя отчет, трябва само да получите стойностите за януари, февруари и март и да ги усредните... това е много по-лесно. Вместо да правите изчислителна заявка за потенциално хиляди редове, вие правите заявка за cron (която няма значение колко време отнема) на няколкостотин реда, а след това действителният отчет прави заявка само за 3 реда.
Друг трик е, колкото повече изчисления можете да направите в SQL, толкова по-добре. Ако искате да осредните полета/записи или да сумирате нещо, изпратете го с вашата SQL заявка. SQL сървърът ще извърши изчислението и ще върне резултата, вместо да ви връща огромни количества данни, за да ги отсеете. Знам, че това не винаги е лесно/полезно, но колкото повече можете да накарате SQL да прави, толкова по-добре.
Надявам се това да помогне. Както казах, сигурен съм, че експерт по база данни иска да ви даде някои по-проницателни съвети. :)