Diese Funktionalität würde am besten durch eine Funktion namens materialisierte Ansicht erfüllt , was MySQL leider fehlt. Sie könnten eine Migration zu einem anderen Datenbanksystem wie PostgreSQL erwägen.
Es gibt Möglichkeiten, materialisierte Ansichten in MySQL mithilfe von gespeicherten Prozeduren, Triggern und Ereignissen zu emulieren. Sie erstellen eine gespeicherte Prozedur, die die aggregierten Daten aktualisiert. Wenn die aggregierten Daten bei jeder Einfügung aktualisiert werden müssen, können Sie einen Trigger zum Aufrufen der Prozedur definieren. Wenn die Daten alle paar Stunden aktualisiert werden müssen, können Sie einen MySQL-Scheduler-Ereignis oder einen Cron-Job, um dies zu tun.
Es gibt einen kombinierten Ansatz, ähnlich Ihrer Option 3, der nicht von den Daten der Eingabedaten abhängt; Stellen Sie sich vor, was passieren würde, wenn einige neue Daten einen Moment zu spät eintreffen und es nicht in die Aggregation schaffen. (Möglicherweise haben Sie dieses Problem nicht, ich weiß es nicht.) Sie könnten einen Trigger definieren, der neue Daten in einen "Backlog" einfügt, und die Prozedur die aggregierte Tabelle nur aus dem Backlog aktualisieren lassen.
Alle diese Methoden werden in diesem Artikel ausführlich beschrieben:http://www.fromdual.com/ mysql-materialized-views