SMFフォーラムなどのオープンソースプロジェクトを見てきましたが、カウントのように見える特殊なログテーブルが組み込まれています。掲示板、メンバー、トピック、検索結果まで特殊なログテーブルを維持するか、各SQLでエントリ数を計算する方が良いですか
現在私のプロジェクトでは、このようなテーブルをまったく使用せず、代わりにSQL_CALC_ROWS
またはCOUNT
を使用して、検索クエリなどのエントリの合計数を取得します。ログテーブルを使用することが有効な解決策であるのか、その逆であるのか不思議に思っていました。
同様に、私はスピードブーストでも可能なウェブアプリケーションで同じ方法を使用しました。必要なときに特定のテーブルの数値カウントを自動的に更新するプログラムを設定するのではなく、GROUP_CONCAT, COUNT
などを使用して特殊SQLクエリを実行する際のオーバーヘッドは何ですか?
たとえば、1ページでメンバー数、クラシファイドエントリ数、アクティブユーザー数などの統計情報を表示する必要がある場合、通常はmysqlでSQL_CALC_ROWS
+ FOUND_ROWS
を実行します。
基本的には、ユーザーが追加または削除を行うたびに、ログテーブルの最新のカウント値を更新するための追加のクエリを実行することを意味します。 – Ali
それは異なります。たとえば、行数が格納されるので、MyISAMテーブルでは非常に高速です。私は他のエンジンがCOUNTを最適化する方法を知っていて、インデックスのみを使ってそれらを実行することを管理していると思います。 – arnaud576875
普通のリストの場合、カウントはちょっと分かりやすい固定ですが、検索条件が可変な動的検索に関してはどうでしょうか。 – Ali