2009-09-02 11 views
0

SQL Server(2008)でこれを行う方法があるかどうか知っていますか?パーティションレベルのインデックスを削除する

私はDataWarehouseの読み込みプロセスを行っているので、読み込み中のパーティションのインデックスを削除して、すばやくバルクロードを実行できるようにしてから、パーティションレベルでインデックスを再構築することができます。

私はこれを実現することは可能だと思いますが、SQL Serverではそうではないと思います。

おかげで、 ビクター

答えて

1

いいえ、1つのパーティションに対してテーブルのインデックスを削除することはできません。しかし、SQL 2008は、同じファイルグループ上の別のパーティションにある同じスキーマを持つ2番目のテーブルを設定し、ロードし、正確にインデックスを作成してから、新しいパーティションを実動表の既存の空の区画。

これは非常に簡単な説明です。これを実装するSQL 2008のMSDN記事は次のとおりです。 http://msdn.microsoft.com/en-us/library/ms191160.aspx

+0

ありがとうございました。これは私が探していたものです。実際には今朝、同僚も私にこのアプローチを説明しました。 – river0

0

私は私はあなたが2008年にこれをやらせるだろう何も聞いていないSQL 2005年に、それは不可能だったけど、それはそこに(私は約読んでいたかもしれませんまだそれを使用していない)。私が得ることができる最も近いのはインデックスを無効にすることでしたが、クラスタ化インデックスを無効にすると、テーブルにアクセスできなくなりました。それほど有用ではない、イホ。

私のWarehouse ETLプロジェクトのソリューションは、すべてのインデックスとインデックス制約(PK、UQ)をリストしたテーブルを作成することでした。 ETLの実行中に、表を参照して(ロードされる表の目的のセットに対して)、索引/索引付けの制約を削除し、データをロードしてから、表を再度参照して索引/制約を再作成します。一種の醜いやや厄介なものですが、一度稼働しても破損することはなく、新たに作成されたインデックス(つまり断片化がなく、fillfactorは100になることができます)の利点があります。索引の追加/変更/削除も面倒ですが、それほど難しいことではありません。

ターゲット表から索引/制約の定義を読んで保存し、ドロップし、データをロードし、格納されたデータから(再)作成スクリプトを動的に作成して実行できます。しかし、実行中に何かがクラッシュした場合、あなたはとても死んでいます。 (これが私が常設テーブルに定住した理由です)

"ローディング"テーブルのすべての作業を行い、ライブ(dbo、for us)テーブルは変更されていないので、これはテーブル分割ではうまく機能します。

関連する問題