2012-03-01 6 views
1

私の状況を例示するには、質問&と答えてください。基本的にはquestionsanswersのテーブルがあります。特定の質問の回答数を表示するためのベストプラクティスは何ですか?行の数を格納するか、行を数えるだけですか?

  • questionsテーブルに「カウント列」がありますか?新しい回答が追加または削除されるたびに、「カウント列」を更新する必要があります。

  • または、answersテーブルのMySQLを使用して回答の行を数えますか?このオプションの私の懸念は、データベースへの負荷ですが、わかりません。

答えて

4

実際に問題が見つからない限り、データベースへの負荷は心配ありません。実際、カウントを保持するオプションは、すべてのCRUD操作で追加の更新を必要とするため、時折カウントするよりオーバーヘッドになると思います。最初にKISSに行き、問題が見つかった場合は修正してください:)

1

私は今のところ単純なままにして、COUNTを使用して行を返しますが、注意すべき注意点があります。

MySQLはCOUNT(*)クエリのインデックスを使用することができるため、MySQLは実際のテーブル行データをヒットしてカウントを取得する必要はありません。 NULL値がインデックスに格納されていないため、NULL値を許可するカラムに対してCOUNT(column)クエリを実行しようとすると、MySQLはNULL値をカウントするために行をスキャンする必要があります。

したがって、NOT NULLとして定義されている列に対してCOUNTを要求してください。

MyISAMテーブルには行数が格納されるため、テーブル内のすべての行に対するCOUNT(*)クエリは超軽量です。これは、MyISAMがテーブル全体をロックして順次更新を強制するので可能です。したがって、MyISAMは、常にいくつの行を知っています。

関連する問題