Tej funkcjonalności najlepiej służyłaby funkcja o nazwie widok zmaterializowany , którego MySQL niestety brakuje. Możesz rozważyć migrację do innego systemu baz danych, takiego jak PostgreSQL.
Istnieją sposoby emulowania zmaterializowanych widoków w MySQL przy użyciu procedur składowanych, wyzwalaczy i zdarzeń. Tworzysz procedurę składowaną, która aktualizuje dane zagregowane. Jeśli zagregowane dane muszą być aktualizowane przy każdym wstawieniu, możesz zdefiniować wyzwalacz do wywołania procedury. Jeśli dane muszą być aktualizowane co kilka godzin, możesz zdefiniować Zdarzenie harmonogramu MySQL lub zadanie crona, aby to zrobić.
Istnieje podejście łączone, podobne do opcji 3, które nie zależy od dat danych wejściowych; wyobraź sobie, co by się stało, gdyby nowe dane dotarły o chwilę za późno i nie trafiły do agregacji. (Możesz nie mieć tego problemu, nie wiem.) Możesz zdefiniować wyzwalacz, który wstawi nowe dane do „zaległości”, a procedura zaktualizuje tabelę zbiorczą tylko z zaległości.
Wszystkie te metody zostały szczegółowo opisane w tym artykule:http://www.fromdual.com/ mysql-materialized-views