1

私のデータベース テーブルのほとんどには、90% の確率でルックアップが行われる明確な一意のインデックスがありますが、これについては少し確信が持てません。データベース内のアイテムに対するユーザーの評価の合計を追跡するテーブルがあります。別のテーブルを追加し、IP アドレス列を使用して個々の評価を追跡し、誰も何かを 2 回評価できないようにします。これが大きくて使用頻度の高いテーブルになることがわかっているので、正しく最適化することが重要です。(MYSQL テーブル)

このテーブルには次のフィールドがあります。

rating_id (常に - 一意)、item_id (常に - 一意ではない)、user_id (オプション - 一意ではない)、ip_address (常に - 一意ではない)、rating_value (常に - 一意ではない)、has_review(bool)

今、私はクエリが次のようになることを 90% 想定しています。

ユーザーが何かを評価した場合 - item_id = x および ip_address = y を選択 (行 = 0 の場合) 評価を挿入

ユーザー アカウント ページの場合 - ip_address = x または username = y の場所を選択します

現在、検索対象のフィールドはどれも一意ではありません。それらをインデックスとして引き続き使用できますか (item _id と ip_address など)。

4

2 に答える 2

6

一意のインデックスまたは一意でないインデックスを持つことができます。1 つのテーブルに複数のインデックスを設定できます。一度に複数のフィールドにインデックスを設定することもできます。

一般に、これらを適切に使用すると、クエリのパフォーマンスが向上しますが、挿入のパフォーマンスが犠牲になる場合があります。

集計された評価を表示する場合は、評価結果を定期的に計算し、結果をデータベースまたはアプリケーションにキャッシュすると、パフォーマンスが向上する可能性があります。

于 2012-09-27T15:36:22.010 に答える
0

各データベース システムにはさまざまな種類のインデックスがあります。一般に、検索を高速化するために、2 番目のデータ構造 (ツリーやハッシュ マップのようなものですが、正直に言うと詳細はわかりません) を構築します。

したがって、これらのフィールドでクエリを非常に迅速に実行するために、テーブルusernameにインデックスを付けることが理にかなっている場合があります。ip-adressインデックスも更新する必要があるため、データの変更は遅くなる傾向があることに注意してください。

于 2012-09-27T15:40:04.640 に答える