ファクトテーブルの主キー(簡潔にするためにPK)を選択する際のベストプラクティスは何ですか。自動インクリメントされたサロゲートキー(SK)が必要ですか、それともナチュラルキー(NK)列を使用する必要がありますか?
私がSKを使用することで得られる利点はINSERTのパフォーマンスです。これは、毎日100万行近くが挿入されている場合に非常に重要です。 1日あたり約2,000万行、1か月あたり約2億行を期待しています。テーブルは分割することなく、何十年もの間データを維持する必要があります。
ただし、NKをPKとして持ち、PKの順序が適切に設計されている場合、クエリのパフォーマンスは向上するはずです。
もちろん、クエリ用の非クラスター化インデックスを作成することもできますが、これはストレージを消費し、INSERTをさらに遅くします。
INSERTとDELETE(そうです、データが再処理され、新しいファイルのバージョンを "更新"する必要があるため、これもたくさんあります)を考慮すると、クエリのパフォーマンスとほぼ同じくらい、パフォーマンスは非常に適切です。
考慮すべき他の問題は、行が削除されてもSKカウントが減少しないことです。 1か月あたり2億行の場合、年間2,4G行になるため、intデータ型では保持できないため、PKにはbigintを使用する必要があります...
コンテキストは何ですか?データウェアハウスについて話しているようです。その場合は、合成キーを作成することを強くお勧めします。私は3つの正当な理由を考えることができます。
480億を超えるレコードは膨大です。まだの場合は、おそらく今月以降のデータの集計を検討する必要があります。合成キーもこれを単純化できます。おそらく値1,000,000,001..1,999,999,999は2017/08の詳細のために予約されており、10月に8月のデータはID 1,000,000,000の単一のレコードに折りたたまれます(これはおそらく良いアイデアではありません。ビジネスキーをウェアハウスキーから切断する方法の例)。
最後に、PKとクラスタリングキーの選択が同じである必要はないことを忘れないでください。それぞれを独自のメリットで評価する必要があります。
スタースキーマのファクトテーブルでは、合成キー(サロゲート、自動インクリメント)は役に立ちません。ファクトテーブル内のすべての外部キーの組み合わせは、perforceの候補キーです。そうしないと、星の形がよくありません。必要に応じて、それを主キーとして宣言できます。私はこれを選択します。
ただし、スターを定期的に更新するためのすてきなタイトなETLプログラムがある場合は、実際には主キーをまったく宣言せずに回避できます。
私はあなたがパフォーマンスに関して言ったことをエコーします。