COUNT() 集計関数を使用して行をカウントするのは、より通常の SQL です。一度に複数のセクションをカウントする必要がある場合は、GROUP BY を使用します。しかし、あなたはそれを知っていましたよね?
最初にベンチマークを行い、次に最適化します。
- テスト サーバー (運用仕様である必要があります) に運用サイズのデータをロードします。すべてのパラメーターを本番サーバーと同じように構成します。
- コードを繰り返し実行して時間を計測します。
- 速度が低下していないようであれば、作業は完了です。
私の提案:
- クエリを説明します。フル テーブル スキャンを実行している場合は、セクション ID にインデックスを追加します。これにより、少なくとも完全なインデックス スキャンまで、完全なテーブル スキャンが削減されます。これはまだ遅すぎるかもしれません。
- それでも遅すぎる場合は、結果をどこかにキャッシュすることを検討してください。投稿が追加、削除、または別のセクションに移動されたときに、このキャッシュを無効にすることができます。
- キャッシュが不便または機能しない場合 (たとえば、キャッシュのヒット率が 90% 未満の場合)、カウントを永続的に保存し、手動で調整することを検討してください。投稿が変更されていない場合、セクションのカウントを再計算する必要はありません。
1e3 セクションに 1e9 の投稿があるとします。ほとんどの場合、ほとんどのセクションの投稿は変更されません。したがって、操作の影響を受けるセクションのカウントを変更するだけです。たとえば、追加/削除の場合は 1 つのセクションを更新し、移動の場合は 2 つのセクションを更新するだけで、998 セクションのカウントは変更されず、コストのかかるカウントを回避できます。オペレーション。
しかし、1e9 の投稿がある可能性は非常に低いと思います (Stackoverflow にはないと確信しています)。
Stack Overflow がタグと質問のカウントをどのように管理しているかを調査することを検討してください。