1

さまざまなテキスト値を int で定義しました。より適切で高速な検索のために、データ テーブルに int 値を格納します。テキスト値を表示するには、次の 3 つのオプションがあります。

  1. コードで Enum を宣言し、int 値に従ってテキスト値を表示します。これは静的であり、新しい値を追加する場合はコードを変更する必要があります。

  2. 動的にするために、別のデータベースにあるテーブルに int 値とテキスト値を格納し、管理者が所有することができます。新しい値は、このテーブルで管理者が更新できます。内部結合を使用して、レコードがフェッチされるたびにテキスト値を表示します。

  3. 実際のテキストをそれぞれのデータ テーブルに格納します。これにより、検索が遅くなります。

私の質問は、次の条件で使用するのに最適なオプションはどれですか?

  1. データ テーブルには 100 万から 1000 万を超えるレコードがあります。
  2. テーブルでフェッチ、検索、更新プロセスを実行している 5000 人以上のユーザーがいます。
  3. テキスト値の最大数は 12 で、長さ (最大) は 50 文字です。
  4. 上記の条件と機能を持つデータテーブルが 30 個あります。
4

3 に答える 3

1

与えられた理由のために私はオプション1に行きません。列挙型はルックアップとして存在しません。1を辞書の作成に置き換えることもできますが、変更を加えるたびに再コンパイルする必要があり、これは悪いことです。

ここのように大量に複製されることが保証されている場合、テキストをテーブルに保存すること(つまり、オプション3)は良くありません。これは、2番目に提案したルックアップテーブルを使用する必要がある場所です。

そうです、それらをデータベーステーブルに保存し、それを介して管理します。

小さなテーブルだけであれば、参加にそれほど時間はかかりません。心配な場合は、最初に必要なときにルックアップテーブルをコードのディクショナリにロードし、小さなルックアップテーブルからコードの値を検索することもできます。ただし、参加するだけで問題が発生することはないと思います。

そして、条件(レコード数など)に関係なく、このアプローチを実行します。しかし、条件はそれをより賢明にします。:)

于 2012-10-05T13:58:10.863 に答える
1

オプション #2 とオプション #1 の組み合わせが好きです - int を使用するが、別のデータベースにディクショナリ テーブルがあります。
説明させてください:

  • int と text を別のデータベースにあるテーブルに格納します。
  • 元のテーブルに int のみを格納します。
  • 別のデータベースからテーブルを結合してテキストを取得するのではなく、クライアントで辞書をキャッシュし、その辞書からテキストを解決します
于 2012-10-05T13:56:49.753 に答える
0

文字通り何百万ものレコードがある場合、サーバーコードまたはクライアントでそのような構造を任意の形式でスピンアップしようとしてもほとんど意味がありません。データベース、IMHOに保存する必要があります。

リストを作成するクエリは、返されるレコードの数を管理可能な数に制限するのに十分スマートである必要があります。おそらく、パーティション化されたビューまたはストアドプロシージャがこの点で役立つ可能性があります。

これが主に読み取り専用リストであり、更新が管理アクティビティのコンテキストでのみ行われる場合は、クライアント側で適切なインデックスとクエリを使用して、テーブルに対して非常に迅速にクエリを実行できるはずです。

于 2012-10-05T13:58:00.420 に答える