Jika Anda berbicara tentang volume data yang lebih besar, lihat Partisi MySQL . Untuk tabel ini, partisi berdasarkan data/waktu tentu akan membantu kinerja. Ada artikel bagus tentang mempartisi di sini .
Lihat pembuatan dua database terpisah:satu untuk semua data mentah untuk penulisan dengan pengindeksan minimal; sedetik untuk pelaporan menggunakan nilai agregat; dengan proses batch untuk memperbarui database pelaporan dari database data mentah, atau menggunakan replikasi untuk melakukannya untuk Anda.
EDIT
Jika Anda ingin benar-benar pintar dengan laporan agregasi Anda, buat satu set tabel agregasi ("hari ini", "minggu ke tanggal", "bulan ke tanggal", "menurut tahun"). Agregat dari data mentah ke "hari ini" baik setiap hari atau dalam "waktu nyata"; agregat dari "berdasarkan hari" ke "minggu sampai saat ini" setiap malam; dari "minggu hingga tanggal" hingga "bulan hingga tanggal" setiap minggu, dll. Saat menjalankan kueri, gabungkan (UNION) tabel yang sesuai untuk rentang tanggal yang Anda minati.
EDIT #2
Daripada satu tabel per klien, kami bekerja dengan satu skema database per klien. Bergantung pada ukuran klien, kami mungkin memiliki beberapa skema dalam satu instans database, atau satu instans database khusus per klien. Kami menggunakan skema terpisah untuk pengumpulan data mentah, dan untuk agregasi/pelaporan untuk setiap klien. Kami menjalankan beberapa server basis data, membatasi setiap server ke satu contoh basis data. Untuk ketahanan, database direplikasi di beberapa server dan beban seimbang untuk meningkatkan kinerja.