0

私はWebアプリケーションを作成しており、DBバックエンドとしてMySQLを使用しています。一部のテーブルの1億行を超えるように、私のDBは最終的に大きくなります。そのような大きなテーブルについて1つ確認したかっただけです。

オプション1。テーブルに主キーがあり、主キーを使用してクエリを作成するとしますが、mysqlクエリを実行する必要があります。たとえば、ユーザーログインごとに100クエリを実行する必要があります。

USERID  KEYS

1       {1,2,3,4}

ユーザーのKEYSを取得してから、主キークエリを実行して各値を取得します

PRI.KEY  Value

1        google

2        yahoo

3        aol

4        windows

ユーザーがログインした場合、たとえばブックマークされたサイトを取得する必要があります。したがって、2つのクエリを実行します。USERID=1のTB_KEYSからKEYSを選択します。次に、KEYSを解析し、各キーについて、TB_VALUESから値を選択します。ここでPRI.KEY =(KEY-最初のクエリから解析して取得しました);

オプション2。主キーを使用してクエリを実行していませんが、ユーザーのログインに対していくつかのクエリを実行する必要があります。

OPT_TABLE_2

USERID  KEY         Value

1       1           google

1       2           yahoo

1       3           aol

1       4           windows

OPT_TABLE_2から値を選択します。ここでUSERID=1;

どちらのオプションが良いでしょう..?

4

2 に答える 2

0

リレーショナルデータベースでは、おそらく最初のデータベースです。適切なインデックスを作成すると、2番目のフィルターを実行するのはかなり高速になりますが、最初のテーブルははるかに小さいテーブルである必要があり、通常はこれが優れています。

実際には、ユーザー、ユーザーとキーのペア、そしてキーの3つのテーブルがある方がよい場合があります。

ただし、これだけ多くのクエリを実行している場合は、その理由を理解して実行回数を減らしたいと思うかもしれません。

重要なパフォーマンスの質問と同様に、ベンチマークします。10Kのテストユーザーとそのデータを生成し、各メソッドで実行するとどうなるかを確認します。

于 2012-05-24T08:40:37.150 に答える
0

しかし、mysql クエリを実行する必要があります。たとえば、ユーザー ログインごとに 100 個のクエリを実行する必要があります。

そのため、このアプローチは間違っています。リレーショナル データベースの正規化ルールを適用していません。

しかし、ユーザーのログインのためにいくつかのクエリを実行する必要があります

それなら、まだ間違っているかもしれません。この構造からユーザーに関連するデータを取得するには、クエリを 1 つだけ実行する必要があります。それか、これらの提案された構造では表されない情報を取得しようとしています。

クエリの数を減らすと、パフォーマンスに大きな影響があります。

自分でテストするのは簡単です。

于 2012-05-24T08:52:32.443 に答える