構造は同じで内容が異なる3つのテーブルを作成するか、すべてのデータとデータを区別する1つの追加の列を含む1つのテーブルを作成するかを選択できます。各テーブルには約10,000行が含まれ、データの検索専用に使用されます。重要な設計基準はルックアップの速度であるため、どちらが高速です。それぞれ10K行の3つのテーブル、または30K行の1つのテーブルですか、それとも実質的な違いはありませんか。注:クエリパラメータとして使用されるすべての列にはインデックスがあります。
2 に答える
最新のRDBMSでは、ルックアップ時間の点で10k行と30k行の間に実質的な違いはありません。いずれにせよ、非正規化を正当化するのに十分な違いはありません。インデックス付き修飾子列は、このような設計の一般的なアプローチです。
更新パターンが限られたデータセットに影響を与える場合に非正規化を検討できるのは、高速挿入/更新用のインデックスが少ない「短い」テーブル(たとえば、ソーシャルネットワークの今日のメッセージ)に入れることができる場合のみです。安定化された更新を大きな完全にインデックス付けされたテーブルに転送するバックグラウンドプロセスがあります。ただし、書き込み操作中に実際に勝った場合は、非常に特殊で不幸な要件があり、劇的なものになります。RDBMSエンジンは、非常に効率的な方法でほとんどの単純なシナリオを処理するのに十分なほど洗練されています。30kまたは行は候補のようには聞こえません。
それでも疑問がある場合は、特定のデータベース/システム設定を確認するためのテストを作成するのは非常に簡単です。調査結果を実際のデータとともにここに投稿すると、ステップのすべての人にとって役立つ情報になると思います。
他のポスターが取り上げており、私も同意する速度の問題とは別に、ソリューションの保守コストに影響を与える可能性があるため、データベースで複製しているビジネスモデルも考慮する必要があります。
3つの「もの」が4つになる可能性があり、別のテーブルパスを選択した場合は、別のテーブルを追加する必要があります。一方、ディスクリミネーターパスを選択すると、新しいディスクリミネーターを思い付くのと同じくらい簡単です。
ただし、ディスクリミネーターパスを選択した後、新しい要件により、「things」の1つに保存するデータが増えることが指定された場合は、他の「things」とは関係のない列をテーブルに追加する必要があります。
あなただけがあなたのビジネスモデルを知っているので、私はどちらが正しい道であるかを言うことができません。