Této funkci by nejlépe posloužila funkce nazvaná materializované zobrazení , který MySQL bohužel postrádá. Můžete zvážit migraci na jiný databázový systém, jako je PostgreSQL.
Existují způsoby, jak emulovat materializované pohledy v MySQL pomocí uložených procedur, spouštěčů a událostí. Vytvoříte uloženou proceduru, která aktualizuje agregovaná data. Pokud musí být agregovaná data aktualizována při každém vložení, můžete definovat spouštěč pro volání procedury. Pokud je třeba data aktualizovat každých několik hodin, můžete definovat Událost plánovače MySQL nebo to udělá cron.
Existuje kombinovaný přístup, podobný vaší možnosti 3, který nezávisí na datech vstupních dat; představte si, co by se stalo, kdyby nějaká nová data dorazila příliš pozdě a nedostala se do agregace. (Možná nemáte tento problém, nevím.) Mohli byste definovat spouštěč, který vloží nová data do "nevyřízené položky" a nechat proceduru aktualizovat agregovanou tabulku pouze z nevyřízené položky.
Všechny tyto metody jsou podrobně popsány v tomto článku:http://www.fromdual.com/ mysql-materialized-views