2013-01-24 10 views
11

私は約50万のレコードを持つ1つのテーブルを持つテストデータベースを持っています。この表には最初に50個の列がありました。テーブルにはインデックスがありません。私が "sp_spaceused"手続きを実行すると、結果として "24733.88 MB"が得られます。今度はこのデータベースのサイズを減らすために、私は15列(主にint列)を削除し、 "sp_spaceused"を実行しますが、結果として "24733.88 MB"が得られます。カラムを削除してもデータベースサイズは小さくなりません

なぜ多くの列を削除した後にデータベースサイズが減少しないのですか?ここに何もないのですか?

編集:私は縮小データベースを試してみましたが、それは助けにはならなかったのどちらか

答えて

19

は、次のコマンドを実行してみてください参照してください。詳細情報はこちらDBCC CLEANTABLEとここにSpace used does not get changed after dropping a column

また、この回答の最初のコメントに正確に記載されているとおり、 DBCC CLEANTABLEコマンドを実行した後は、スペースを取り戻すために、テーブルに1つがある場合はクラスタ化インデックスをREBUILDする必要があります。

ALTER INDEX IndexName ON YourTable REBUILD 
+1

このリンクでも同様の解決策が見つかりました:http://stackoverflow.com/questions/807579/how-to-reduce-size-of-sql-server-table-that-grew-from-a-datatype-change 私は今それを試しています!ありがとう! – Vinod

+0

@Vinod、それが有用なのであれば、答えられたチェックマークをチェックすることを忘れないで、他の人が正しい答えであることを確かめることができます。 – Yaroslav

+0

さて、私はクエリを実行し、データベースは45GBに成長しました。私は再びデータベースを縮めて元の24733.88MBに戻ってきました。何が起こっているのか分かりません!!! :-( – Vinod

1

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

解放された領域を再利用するには、データベースファイルを縮小する必要があります。

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

それは、テーブルまたはインデックス付きビューにドロップ可変長列からスペースを解放します:How do I shrink my SQL Server Database?

+0

私のデータベースを縮小しようとしたログファイルをしています。それは助けになりませんでした! – Vinod

3

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

DBCCコマンドDBCC CLEANTABLEもあり、以前は可変長列で占有されていたスペースを再利用することができます。ここで構文です:私は私の編集で述べたように、私はすでに

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

ラジ

関連する問題