これは、読者が引き続き利用できるようにする必要がある、頻繁にインデックス付けされたファクト タイプ テーブルにデータをすばやく取得するための最良の方法として、パーティションの切り替えを明確に決定した後の私の以前の質問へのフォロー アップです。
これは最善の方法のように思えますが、複数 (5 人未満) のユーザーが同時に一括挿入し、新しいデータにインデックスを付け、インデックス付きビューに表示する (ない) という要件を実際に満たすには十分ではありません。必ずしも実際のインデックス付きビューであり、インデックスに依存する選択のみ)。
パーティショニングの考え方は、各パーティションとそのパーティションをルートとするインデックス サブツリーを並行して読み取り専用としてロックし、作業テーブルにコピーし、新しいデータを挿入/更新し、インデックスを再構築してからメイン テーブルに戻すというものでした。したがって、読者は影響を受けません。
問題は、単一の作業テーブルです。各並列一括挿入には独自のコピーが必要であり、切り替えを可能にするためにメイン テーブルと同じ制約が適用されます。
これまでのところ、このボトルネックを回避しようとしていくつかの壁にぶつかりました。
- 同じパーティション関数を使用して、作業テーブルをパーティション分割してみました。パーティションごとにインデックスを無効にして、別のインデックスを再構築している間、パーティションに挿入することはできないため、これは機能しません。
- 作業テーブルとして一時テーブルを作成します。同じインデックス名を使用できますが、制約を動的に作成することは簡単ではなく、とにかくそれを切り替えることができないため、これは機能しません。
- 名前付き作業テーブルの固定セットがありますか? ストアド プロシージャが 1 つだけになるように、1 つを選択してエイリアスで操作するにはどうすればよいですか?
- 動的 SQL ? 私はその道を避けるために一生懸命努力してきました。そのままでは複雑です。
大きな挑戦ですが、ボトルネックを受け入れる前に何かアイデアはありますか? Sql 2012 は役に立ちますか? 適切なデータウェアハウスはこれにどのように対処しますか?