巨大なテーブルにクラスター化インデックスを作成する簡単な方法


22

そのため、パフォーマンスが大幅に低下していると不満を言っているカスタマーサイトがあります。ひと目見てみると、問題は、Somebody Else(grrrr)がクラスター化インデックスなしで約2,000万件以上のレコードを保持するテーブルを設計したためであることは明らかです。

次に、そのテーブルにクラスター化インデックスを作成しますが、テスト環境ではcreate indexコマンドが1時間実行されており、まだ実行されていません。顧客サイトは24時間年中無休で稼働する作業場であり、インデックスを作成している間は1時間のダウンタイムは許されません。

インデックスを作成するためのブルートフォースの少ない方法で、ジョブをすばやく終了するか、ビジー状態のときにサーバーのパフォーマンスを完全に低下させないスマートな方法で実行しますか?

SQL Server Enterprise Editionを使用しています。

回答:


26
  • SQLサーバーがEnterprise +エディションで、テーブルにBLOBフィールドがない場合- CREATE CLUSTERED INDEX ... WITH(ONLINE=ON)

  • そうでない場合-サイドに同じスキーマを使用してテーブルを作成し、すべてのINSERT / UPDATE / DELETE操作(トリガーを使用するなど)を含むデータを賢明に転送し、古いテーブルを正確に削除して名前を変更する以外に方法はありません古いと同じ名前の新しい-短所:遅い、サーバーとストレージに余分な負荷を追加する


12

顧客が使用しているSQLサーバーのバージョンがわからない。エンタープライズでは(ONLINE = ON)でインデックスを構築できるため、インデックスが作成されるまでテーブルは利用可能です。


8
  • オリジナルと同じ新しいテーブルを作成します(明らかに別の名前が必要になります)
  • 新しいテーブルにクラスター化インデックスを作成する
  • データを新しいテーブルにロードする
  • 元のテーブルを削除
  • 元の名前を使用して新しいテーブルの名前を変更する

元のファイルから必要だったアクセス許可を必ず適用してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.