web-dev-qa-db-ja.com

インデックスを変更してデータベース全体を再構築するにはどうすればよいですか?

'db'という名前のSQL Server 2008データベースのすべてのテーブルのインデックスを再編成したいと思います。私は次のコマンドを試します:

ALTER INDEX all ON db REBUILD

そして、私は次のエラーを受け取ります:

オブジェクト "db"は存在しないか、権限がないため、見つかりません

何が悪いのですか?

7

すべてのテーブルを実行するには:

EXEC sp_MSForEachTable 'ALTER INDEX ALL ON ? REBUILD'

上記のように、データベース内のすべてのテーブルを実行するステートメントはありません

ただし、これが不要な場合もあります。たとえば、読み取り専用テーブルや巨大なテーブルなどです。また、一部のテーブル/インデックスはほとんど断片化されません。

よりインテリジェントな方法は、最初に断片化をチェックしてから、再構築または再編成することです。一般的で広く使用されている例の1つは SQL Foolのスクリプト です。

14
gbn