Als je het hebt over grotere hoeveelheden gegevens, kijk dan eens naar MySQL-partitionering . Voor deze tabellen zou een partitie op gegevens/tijd zeker de prestaties ten goede komen. Er is een goed artikel over partitionering hier .
Kijk naar het maken van twee afzonderlijke databases:één voor alle onbewerkte gegevens voor de schrijfbewerkingen met minimale indexering; een tweede voor rapportage met behulp van de geaggregeerde waarden; met ofwel een batchproces om de rapportagedatabase bij te werken vanuit de database met onbewerkte gegevens, of gebruik replicatie om dat voor u te doen.
BEWERKEN
Als u echt slim wilt zijn met uw aggregatierapporten, maakt u een set aggregatietabellen ("vandaag", "week tot nu", "maand tot nu", "per jaar"). Aggregeren van onbewerkte gegevens tot "vandaag", dagelijks of in "realtime"; aggregatie van "per dag" tot "week tot nu toe" op een nachtelijke basis; van "week tot datum" tot "maand tot datum" op wekelijkse basis, enz. Bij het uitvoeren van zoekopdrachten voegt u (UNION) de juiste tabellen toe voor de datumbereiken waarin u geïnteresseerd bent.
BEWERK #2
In plaats van één tabel per klant, werken we met één databaseschema per klant. Afhankelijk van de grootte van de client, hebben we mogelijk meerdere schema's in een enkele database-instantie, of een speciale database-instantie per client. We gebruiken afzonderlijke schema's voor het verzamelen van onbewerkte gegevens en voor aggregatie/rapportage voor elke klant. We gebruiken meerdere databaseservers en beperken elke server tot een enkele database-instantie. Voor veerkracht worden databases over meerdere servers gerepliceerd en load-balanced voor verbeterde prestaties.