ブログアプリケーションを実装している場合-何を好みますか-
「POSTS」テーブルにコメントの数を格納するカウンターがあります
SELECT comment_count
FROM posts WHERE post_id = $id
...または「COMMENTS」テーブルからの特定の投稿に対するコメントの数を数える:
SELECT COUNT(*)
FROM comments
WHERE post_id = $id
どちらがより最適化されていますか?
ブログアプリケーションを実装している場合-何を好みますか-
「POSTS」テーブルにコメントの数を格納するカウンターがあります
SELECT comment_count
FROM posts WHERE post_id = $id
...または「COMMENTS」テーブルからの特定の投稿に対するコメントの数を数える:
SELECT COUNT(*)
FROM comments
WHERE post_id = $id
どちらがより最適化されていますか?
その特定のSQLクエリのパフォーマンスが問題であることが確実になるまで、2番目の形式であるCOUNTを使用します。最初に提案しているのは、基本的に非正規化です。これは、必要であることが確実にわかっている場合は、問題なくダンディです。
インデックスを使用すると、2番目のクエリを非常に迅速に実行できます。
要因を見てみましょう。
ケース1:投稿を表示すると、コメントが表示されます。つまり、それらをすべて取得し、表示するときに数えることができます。その場合、いいえ。
ケース2:投稿を表示すると、コメントは表示されませんが、「15件のコメント」というリンクが表示されます。その場合、方程式があります。
カウントの具体化:
コメント保存1回のコスト=1挿入+1更新
1つの投稿表示のコスト=1読み取り
ブログ表示の平均数=D
コメントの平均数=C
したがって、ディスプレイDとコメントCの比率は、次のとおりです。
C *(挿入+更新)<D *(読み取り)
通常、D >> Cは真実なので、その余分な更新のコストはなくなることをお勧めします。
これはブログにとってそれほど重要ではないかもしれませんが、テーブルがたくさんあり、これらの決定を行う必要がある場合を知ることは重要な公式です。