クラスター化されたインデックスを台無しにした後、どちらを使用する必要がありますか?統計を更新し、リネックスまたは再編成します
-
22-10-2019 - |
質問
クラスター付きの単一列インデックスがある場合、 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
常にオンラインで実行されます。