質問: 正規化とパフォーマンス:(この)スキーマ内のリンクテーブルを削除する利点/問題? 一般的に、私は自分のデータベースをできる限りクリーンで拡張可能なものにしたいと考えています。 しかし、いくつかのテストを行った後、大規模なデータセットを扱うときには、通常これを実行する最善の方法ですが、問題の「ダーティ」なアプローチよりもはるかに遅いことがわかりました。 基本的に私はオブジェクトのテーブルを持っていると言うことができます。これらのオブジェクトは特定の人に属します。私の最初の考えは、私がいつものように、私のオブジェクトのためのオブジェクトテーブル、私の人のための人々テーブル、そしてobject_to_peopleリンカテーブルを作成することでした。 ただし、オブジェクトとリンカテーブルを結合してすべてのオブジェクトを取得するには、最大約3秒かかることがあります(これは400kレコードに基づいていますが、オブジェクトあたり1つのリンクのみに基づいています)。はい、インデックスのe.c.tを設定します。試して物事をスピードアップする If I instead remove the people and linker table, and put the people in the objects table as columns and use 1/0 to set whether each person is assigned to that object, without joining the two large tables i see a speed of around 0.3 -> 0.7 seconds (varied greatly). まず、2人だけが必要です。しかし、もし私がそれを助けることができれば、私はあまりにも制限的であることを望んでいません。私はキャッシングを使用することができ、エンドユーザのタイミングを改善しないことを知っていますが、リンクテーブルではなくカラムを使用することは実際には悪い考えです。
回答: 1つのオブジェクトが複数の人物に同時に属している可能性がある場合は、リンクテーブルを保持してください。