クラスター化されたインデックスを台無しにした後、どちらを使用する必要がありますか?統計を更新し、リネックスまたは再編成します

dba.stackexchange https://dba.stackexchange.com/questions/16702

質問

クラスター付きの単一列インデックスがある場合、 FooId SQL Server 2008、2012で、私は行の順序を台無しにしたことを知っています。 FooId もう列、どのコマンド/sを使用する必要があります:

  • 統計を更新します
  • 再構築します
  • 再編成します

編集

シナリオFooId タイプシーケンシャルの一意のIdentifierのクラスター化されたPKですが、シンプルに保つために、この投稿は#1をID値として使用します。

#1 inserted

#2 inserted

#3 inserted


#1 selected

#1 deleted


#2 selected

#2 deleted


#2 inserted (それは#1のクラスター化されたPKを再利用しています)

#1 inserted (それは#1のクラスター化されたPKを再利用しています)


これはシーケンシャル順序を破るつもりはありませんか?今はこのように保管されませんか:

#3

#2

#1

//ダニエル

役に立ちましたか?

解決

クラスター化されたインデックスの仕組みを誤解している可能性があります - 定義により データはクラスタリングキーのシーケンスで論理的に順序付けられますが、新しいデータが挿入されたときにページスプリットが発生するにつれてクラスター化されたインデックスが物理的に断片化される可能性があります。

断片化を減らしたい場合も REBUILD また REORGANIZE 適切な場合があります。経験則は、断片化が5%未満の場合、何もしないことです。 REORGANIZE 断片化が5%から30%の場合、 REBUILD 断片化が30%を超える場合。

インデックスフラグメンテーションはDMVに記録されます sys.dm_db_index_physical_stats. 。参照してください MSDNページ REBUILD/REORGANIZE

SQL Server Enterprise Editionを実行していない限り、それは注目に値します。 REBUILD オンラインで実行することはできません。つまり、コマンドの期間中、テーブルがアクセスできないことを意味します。 REORGANIZE 常にオンラインで実行されます。

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top