2009-08-12 11 views
0

1時間前にシンプルな小さなテーブル(わずか8フィールド)を持っていますが、テーブルのインデックスの1つを再構築しました。テーブルのインデックスは0%のフラグメンテーションにリセットされましたが、今は最大38%です。インデックスが断片化しているのはなぜですか?

テーブル自体に400kのレコードがありますが、インデックスを再構築してから158個の新しいレコードが挿入されました。レコードの更新はありませんでしたが、おそらくいくつかの削除がありました。

インデックスが断片化するのはなぜですか?

インデックスは一意ではなく、クラスタ化されていないフィールドは1つだけです。

データベースは、SQL Server 2005のではなく、SQL Serverの互換性レベルを2000

おかげ

答えて

3

を実行していることが再構築されたときにそのインデックスのフィルファクターを確認してください。塗りつぶし係数が高すぎる可能性があります。この場合、インデックスの再構築時にインデックスページがいっぱいになり、すぐに新しい行が追加されてページ分割(フラグメンテーション)が発生します。再構築時の塗りつぶし係数を小さくすると、ページ分割が開始される前に、より多くの新しいレコードをインデックスページに挿入することができます。

http://msdn.microsoft.com/en-us/library/aa933139%28SQL.80%29.aspx

+0

あなたの答えをありがとう。私がインデックスを再構築するとき、fill factorを0に設定しました。これはsys.indexesで設定されていますか? –

+0

0の塗りつぶし係数は使用しないでください。デフォルトは通常80などと考えられますが、わかりません。あなたは50または60に設定することができます...? – NYSystemsAnalyst

2

フィルファクター0は100に等しいので、あなたは、挿入のためにどの部屋を許可されていません。あなたが挿入する場合は、より低いフィルファクタを選択する必要があります。

+0

塗りつぶし係数を小さくすると、ページのインデックス行の間にスペースができますが、新しいテーブル行の結果、それらのギャップに入るか、最後に追加される新しいインデックス行になりますか? –

+0

それはギャップを埋める。塗りつぶし係数が100の場合、ページは完全に塗りつぶされ、新たに挿入される行の余地はありません。したがって、これらの行は新しいページに置かれます(a.k.a.ページ分割)。 – NYSystemsAnalyst

関連する問題