Тази функционалност би била най-добре обслужвана от функция, наречена материализиран изглед , който MySQL за съжаление липсва. Можете да помислите за мигриране към друга система за бази данни, като PostgreSQL.
Има начини за емулиране на материализирани изгледи в MySQL с помощта на съхранени процедури, тригери и събития. Вие създавате съхранена процедура, която актуализира обобщените данни. Ако обобщените данни трябва да се актуализират при всяко вмъкване, можете да дефинирате тригер за извикване на процедурата. Ако данните трябва да се актуализират на всеки няколко часа, можете да дефинирате Събитие на MySQL планировчик или cron работа, за да го направите.
Има комбиниран подход, подобен на вашия вариант 3, който не зависи от датите на входните данни; представете си какво ще се случи, ако някои нови данни пристигнат твърде късно и не попаднат в агрегирането. (Може да нямате този проблем, не знам.) Бихте могли да дефинирате тригер, който вмъква нови данни в „задържане“ и процедурата да актуализира обобщената таблица само от изоставането.
Всички тези методи са описани подробно в тази статия:http://www.fromdual.com/ mysql-materialized-views