最近、私は答えを探して、いくつかの疑問を持っています。
通常、データウェアハウスを設計するときは、スターモデル、スノーフレークモデル、またはハイブリッドのいずれかを使用し、通常、マスターデータをディメンションテーブルに正規化します(パフォーマンスを考慮して、非正規化することもあります)。私の質問は、ディメンションテーブルに正規化するか、あらゆる種類の異なるディメンションテーブルを作成することですが、どのようなメリットがありますか?
スペースを節約する場合は、SQLServerの異なるレベルの圧縮ですでにスペースが節約されます。 たとえば、ファクトテーブルには、一意の値の1%しかないvarchar(max)列があり、それをディメンションテーブルに正規化し、キーをファクトテーブルに配置すると、スペースの節約に役立ちます。ただし、SQL行レベルの圧縮により、理論的には同じように機能します。代わりに、独自の設計によって正規化されます。SQLServerは文字列パターンを見つけてどこかに保存します。行内はポインタのみであるため、スペースの使用量は理論的には次のようになります。鍵。
クエリのパフォーマンスを向上させるために、ディメンションテーブルを使用する場合は、ディメンションにどのインデックスがあるかに関係なく、少なくとも最初に非クラスターインデックススキャン/インデックスでディメンションテーブルを検索してキーを取得し、次にキーを使用してクラスターインデックスを取得する必要があります。またはRIDを実行してから、完全なデータを取得します。これはI/Oの2倍です。ディメンションがない場合でも、対応する列であるファクトテーブルにインデックスがあります。圧縮により、インデックステーブルは、ディメンションテーブルにインデックスを作成するのと同じサイズになります。したがって、クエリを実行する場合、おそらく1回限りの非クラスターインデックススキャン/クラスターインデックスシーク/その後の完全なデータであるため、I / Oはさらに小さくなり、結合がなければ、クエリのパフォーマンスはさらに速くなる可能性があります。 。
では、すでに圧縮が行われているのに、なぜディメンションが必要なのですか?