次の画像に示すように、SQL Server 2008R2 Standardにクラスタードインデックスのないテーブルがあり、未使用のスペースがたくさんあります。
MyTable
から未使用のスペースを再利用するにはどうすればよいですか?
このテーブルは次のように宣言されています。
CREATE TABLE [dbo].[MyTable](
[RecordID] [varchar](50) NULL,
[DocumentID] [nvarchar](100) NULL,
[DocumentName] [varchar](100) NULL,
[DocumentOwner] [varchar](50) NULL,
[DocumentTemplate] [varchar](50) NULL,
[DocumentData] [ntext] NULL,
[DocumentDate] [char](10) NULL,
[DocumentTime] [char](10) NULL,
[DocumentSize] [int] NULL,
[DocumentUpdateVersion] [int] NULL,
[SecondaryStorageURI] [varchar](150) NULL,
[PreviousExportUri] [varchar](150) NULL
)
未使用のスペースを解放するには、どのような手順に従う必要がありますか?
テーブルにクラスター化インデックスがない場合、デフォルトでは、削除によって空のページが割り当て解除されることはありません。
オプションは次のとおりです。
テーブル構造を考えると、未使用のスペースはおそらく[DocumentData]の削除によるものです。ヒープであるという事実は、この問題にとってそれほど重要ではありませんが、ソリューションを少し単純化します。
テーブルの名前を変更し、保存したバージョンから新しいテーブルにデータをコピーして、古いテーブルを削除します。
- ステップ1
sp_rename 'dbo.MyTable','dbo.MyTable_sav'
- ステップ2
SELECT [RecordID],
[DocumentID],
[DocumentName],
[DocumentOwner],
[DocumentTemplate],
[DocumentData],
[DocumentDate],
[DocumentTime],
[DocumentSize],
[DocumentUpdateVersion] ,
[SecondaryStorageURI] ,
[PreviousExportUri]
INTO dbo.MyTable
FROM dbo.MyTable_sav
-手順1と2を確認します
DROP TABLE dbo.MyTable_sav