web-dev-qa-db-ja.com

スペースを解放するために固定長の列を削除することは賢明ですか?

SQL Server 2005に巨大なテーブルがあります。(テーブルは約40 GBです)スペースを解放するか、その成長を遅らせるための最も安全で最も痛みのない方法を探しています。

テーブルには3つの固定長(char(10))列があり、a)完全に不要で、b)ほぼ完全にNULLで埋められています。

これらの列をドロップすると、新しいレコードがインポートされたときに、SQL Serverはデータファイル内の解放されたスペースを使用し始めますか?または、多くのレコードに分散しているために断片化された性質(私は推測)は、SQL Serverがパフォーマンス上の理由でスペースを無視することを意味しますか?

それらを削除した場合、縮小データベースを実行してスペースを解放できますか?

私はこのデータベースを利用する唯一の開発者であり、これらの列は要件に対して余剰であることを知っています。これらは、15年前に別の遅延開発者がこのデータベースを作成したときに、フラットファイルのその他すべての列とともに追加されました。

4
MrVimes
  1. インデックスを再構築するか、DBCC CLEANTABLEを実行すると、それらを削除するとスペースが解放されます。
  2. 新しい行にはこれらの列はありません
  3. 固定長の列は、NULLかどうかに関係なく、常に領域が予約されています(注:NULLの可変長列は、通常、領域を消費しません)。
  4. データベースを縮小しないでください。データベースは再び大きくなるだけで、他の問題があります(ここでは範囲外)。
  5. 40GBは大きくありません

注:スペースを再利用するためのインデックスの再構築では、クラスター化インデックスがあることを前提としています

7
gbn