大量のデータについて話している場合は、MySQLパーティショニングを参照してください。 。これらのテーブルの場合、データ/時間によるパーティション分割は確かにパフォーマンスに役立ちます。 ここ のパーティション分割に関する適切な記事があります。 。
2つの別々のデータベースを作成することを検討してください。1つは最小限のインデックスを使用した書き込み用のすべての生データ用です。集計値を使用してレポートするための1秒。バッチプロセスを使用して生データデータベースからレポートデータベースを更新するか、レプリケーションを使用して更新します。
編集
集計レポートを非常に巧妙にしたい場合は、一連の集計テーブル( "today"、 "week to date"、 "month to date"、 "by year")を作成します。生データから「今日」まで、毎日または「リアルタイム」で集計します。 「日ごと」から「週ごと」まで、夜間に集計します。週単位で「週から日」から「月から日」など。クエリを実行するときは、関心のある日付範囲に適したテーブルを結合(UNION)します。
編集#2
クライアントごとに1つのテーブルではなく、クライアントごとに1つのデータベーススキーマを使用します。クライアントのサイズに応じて、単一のデータベースインスタンスに複数のスキーマがある場合や、クライアントごとに専用のデータベースインスタンスがある場合があります。生データの収集と、クライアントごとの集計/レポートに別々のスキーマを使用します。複数のデータベースサーバーを実行し、各サーバーを単一のデータベースインスタンスに制限します。復元力を高めるために、データベースは複数のサーバーに複製され、パフォーマンスを向上させるために負荷分散されます。