2

Sql Server Management Studioで「テーブルごとの上位ディスク使用量」レポートを実行すると、約1.8GBのディスク領域を使用しているテーブルの1つが表示されます。

ここに画像の説明を入力してください

テーブル定義:

CREATE TABLE [dbo].[RecipeItems](
    [wo_id] [varchar](50) NOT NULL,
    [invent_id] [varchar](50) NOT NULL,
    [invent_dim_id] [varchar](50) NULL,
    [ratio] [float] NOT NULL
) ON [PRIMARY]

各行の使用量は200バイト未満で、7Kレコードしかない場合、これは1〜2MBを超えることはないと概算しますしかし、明らかに、これは当てはまりません。このテーブルが大量のストレージを使用する理由は何でしょうか。

4

1 に答える 1

7

多くのデータが更新または削除されている可能性があります。これはヒープであるため、更新はレコードの転送につながる可能性があります。私はこれを最初に試します:

ALTER TABLE dbo.RecipeItems REBUILD;

次に、クラスター化されたインデックスを追加することを検討します。

このテーブルを修正するためにデータベースの縮小コマンドを実行しないでください。

「すべて削除して一括挿入」を実行するときは、この方法で実行し、途中で再構築を実行します。

TRUNCATE TABLE dbo.RecipeItems;
ALTER TABLE dbo.RecipeItems REBUILD;
BULK INSERT dbo.RecipeItems FROM ...

クラスタ化されたインデックスを追加する場合は、これを少し異なる方法で行うことができます。また、TRUNCATEを使用できない場合は、明らかにDELETEを使用し続けてください。テーブルが適格である場合、TRUNCATEによってログチャーンが少なくなります。テーブルを消去して再入力しているため、回復する必要はないようです。実際、テーブルを削除して毎回再作成することを検討するかもしれません。

于 2012-08-09T14:40:04.433 に答える