12

約 5000 万のレコードを持つ 1 つのテーブルを持つテスト データベースがあります。テーブルには、最初は 50 列ありました。テーブルにはインデックスがありません。「sp_spaceused」プロシージャを実行すると、結果として「24733.88 MB」が得られます。このデータベースのサイズを縮小するために、15 列 (ほとんどが int 列) を削除して "sp_spaceused" を実行しましたが、結果として "24733.88 MB" が得られます。

非常に多くの列を削除した後、データベースのサイズが縮小されないのはなぜですか? ここで何か不足していますか?

編集:データベースの縮小を試みましたが、どちらも役に立ちませんでした

4

3 に答える 3

22

次のコマンドを実行してみてください。

DBCC CLEANTABLE ('dbname', 'yourTable', 0)

テーブルまたはインデックス付きビューで削除された可変長列から領域を解放します。詳細についてはこちらDBCC CLEANTABLEおよびこちら列を削除した後に使用されるスペースが変更されない

また、この回答への最初のコメントに投稿されたリンクで正しく指摘されているように。DBCC CLEANTABLE コマンドを実行した後、テーブルにクラスター化インデックスがある場合は、スペースを取り戻すために、クラスター化インデックスを再構築する必要があります。

ALTER INDEX IndexName ON YourTable REBUILD
于 2013-01-24T08:19:47.187 に答える
3

テーブルから可変長列を削除しても、テーブルのサイズは縮小されません。インデックスが再編成または再構築されるまで、テーブル サイズは変わりません。

DBCC コマンド DBCC CLEANTABLE もあります。これを使用すると、以前に可変長列で占有されていたスペースを再利用できます。構文は次のとおりです。

DBCC CLEANTABLE ('MyDatabase','MySchema.MyTable', 0)WITH NO_INFOMSGS;
GO

ラージ

于 2013-01-24T08:22:10.763 に答える
1

オブジェクトを削除したからといって、データベースのサイズが縮小することはありません。通常、データベース サーバーは、後続のデータ挿入または新しいオブジェクトに使用する再利用された領域を保持します。

解放されたスペースを再利用するには、データベース ファイルを圧縮する必要があります。SQL Server データベースを縮小するにはどうすればよいですか? を参照してください。

于 2013-01-24T08:17:38.200 に答える