5

ここに問題があります。(主キーID、製品名、製品ID、ストア名、ストアID、販売日)のような列を持つ販売情報を含む販売情報テーブルがあります。店舗/商品/販売日にドリルアップやドリルダウンなどの分析を行いたい。

私が考えている2つのデザインオプションがあります、

  1. 製品名、製品ID、ストア名、ストアID、販売日などの列に個別のインデックスを作成します。
  2. データウェアハウススノーフレークモデルを使用して、現在の販売情報テーブルをファクトテーブルとして扱い、製品、店舗、および販売日のディメンションテーブルを作成します。

分析性能を上げるためには、スノーフレークモデルの方がいいと聞きました。しかし、データベース設計の観点から、関連する列のインデックスよりも優れているのはなぜですか?

よろしくお願いします、リン

4

1 に答える 1

3

アプリの使用パターンと最適化する対象を知ることは重要です。ここに、(多くの中で)一方を他方から選択するいくつかの理由があります。

正規化されたスノーフレークPRO:

クエリが高速になり、ディスクとメモリの要件が低くなります。正規化された各行には長いテキストフィールドではなく短いキーしかないため、プライマリファクトテーブルははるかに小さくなります。インデックスが使用されている場合でも(クエリがインデックス自体によって直接回答されない限り)、部分的なテーブルスキャンが必要になることが多く、データが小さいほどディスク読み取りが少なくなり、アクセスが速くなります。

より簡単な変更とより良いデータ整合性。店の名前が変わったとしましょう。スノーフレークでは1つの行を変更しますが、非正規化された大きなテーブルでは、表示されるたびに変更する必要があり、多くの場合、スペルミスや同じ名前の複数のバリエーションが発生します。

非正規化ワイドテーブルPRO:

より高速な単一レコードのロード。ほとんどの場合、単一のレコードまたは少数のレコードをロードする場合、すべてのデータを1つの行にまとめると、キャッシュミスまたはディスク読み取りが1回だけ発生しますが、スノーフレークでは、DBは異なるディスクの複数のテーブルから読み取る必要があります。場所。これは、NoSQLデータベースがキーに関連付けられた「オブジェクト」を格納する方法に似ています。

于 2013-01-13T04:38:16.327 に答える