1

たとえば、ユーザーが1〜300のリストから任意の数を選択でき、各ユーザーの選択を追跡する必要があるとします。覚えておいてください、彼らは最大300の数字を選ぶことができます(egif彼らはそれらすべてを選ぶ、1、2、3 ... 299、300)、まったくない、またはその間の何か(例えば、4、17、87、113、189、 251、289)。

MySQLで各ユーザーの選択を追跡するための最良で最も効率的な方法は何ですか?

私が考えることができる2つの選択肢は次のとおりです。

1)ユーザーごとに1行、列にはユーザーの選択のコンマ区切りリストが含まれます。選択範囲を追加および削除するには、そのユーザーの列を取得し、選択範囲を追加/削除してから、リストを列に保存し直す必要があります。

2)個々の選択ごとに1つの行、対応するユーザー用の列、および行われた個々の選択用の別の列。選択範囲を追加および削除するには、そのユーザーと選択範囲に対応する行のINSERTまたはDELETEを実行するだけです。

2)DBにとってはより「自然」なようですが、数十万のユーザーがそれぞれ最大300の選択を行う場合、ほとんど非効率に見えます。これにより、次の積に等しい行数のテーブルが作成されます。それらの2つ。一方、1)には、ユーザー数に相当する行数のみが含まれます。

そうは言っても、私は2)に傾倒しています。これは、DBにとってより自然なことですが、サイトの速度を低下させたくないので、それが正しいオプションであり、これを行うためのより効率的な方法がないことを確認したかっただけです。それがどんどん大きくなるにつれて、これのためにダウンします。

ありがとう!

4

2 に答える 2

0

SQL はデータの行を処理するのに非常に効率的ですが、1 つの列内のデータを照会するのははるかに効率的ではありません。

于 2012-07-30T12:11:39.557 に答える
0

適切にインデックス付けされた #2 は、メモリ/ディスクの観点から見て、#1 の人口密度がまばらであるため、どちらかといえば優れています。また、ユーザーごとに 1 行または 300 行ということは、対数時間で検索を実行しているインデックス付きルックアップに対してほとんど意味がありません。

于 2012-07-30T12:12:33.987 に答える