質問

MySQLでは、一般に3列で100行、または100列で1行を返す方が高速/効率的/スケーラブルですか?

言い換えれば、多くのキーを保存するときgt;レコードに関連する値のペア、各キーを保存することをお勧めしますgt; record_idをキーとする別の行の値ペア、または各キーの列を含むrecord_idごとに1つの行を設定しますか?

また、キーをかなり定期的に追加/削除する必要があると仮定します。これは、テーブルが十分に大きくなると、多列アプローチの長期的な保守性に影響すると思います。

編集:「定期的に」明確にするためにキーの追加または削除は月に1回程度です。

役に立ちましたか?

解決

定期的に列を追加または削除しないでください。

他のヒント

http://en.wikipedia.org/wiki/Entity-Attribute-Value_model

このモデルには多くの悪い点があり、他の選択肢がある場合は使用しません。アプリケーションに必要なデータ列の大部分(いくつかのユーザーカスタマイズ可能なフィールドを除く)がわからない場合は、設計により多くの時間を費やして把握する必要があります。

キーが事前に設定されている場合(設計時に既知)、はい、各キーを個別の列に配置する必要があります。

設計時にそれらが不明な場合は、後で RDBMS の外部で解析する必要があるキーと値のペアのリストとしてデータを返す必要があります。

キー/値のペアを保存する場合は、キー用(テーブルのPKにする)と値用の2つの列を持つテーブルが必要です(おそらく、このインデックスはまったく必要ありません) 。 「キー、キー全体、およびキー以外は何もありません」を覚えておいてください。

複数列のアプローチでは、列を削除するとすべての値が無効になり、実行したくないため、テーブルが無限に成長することがわかります。ここでの経験から言えば、ほぼ1000列のテーブルが1つあり、そのほとんどがビットフィールドであったレガシーシステムで作業したことがあります。最終的に、誰かがそれを使用している可能性があり、最後にそれを行ったために、バックアップにロールバックする午前2時まで作業していたため、列を削除するケースを作成できなくなります。 p>

最初:データにアクセスする必要がある頻度を決定します。データを常にワンショットで取得する必要があり、そのほとんどが使用される場合、すべてのキーペアをシリアル化された値またはxml値として保存することを検討してください。そのデータに対して何らかの複雑な分析を行う必要があり、値のペアが必要な場合、列は問題ありませんが、クエリを実行する必要があることがわかっている値に制限します。一般に、1つのパラメーターに1つの列を使用するクエリは、行よりも簡単に設計できます。また、作業が簡単になります すべてが1行に含まれる場合、返される値は多数よりも多くなります。

2番目:最も頻繁にアクセスするデータを分離し、それを独自のテーブルに入れ、他のデータを別のテーブルに入れます。ちなみに100列は非常に多いので、データを管理しやすい小さなチャンクに分割することをお勧めします。

最後に:頻繁に変更される可能性のあるデータがある場合は、1つのテーブルに列(キー)を作成し、キー値を格納する対象の数値キー値を使用する必要があります。これは、同じキーを複数回使用することを前提としており、ルックアップを行う際に検索を高速化する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top