5

私は、会社が開始している新しいデータベースのデータベース標準を作成しています。私たちが定義しようとしていることの1つは、UniqueIdentifierに関連した主キーおよびクラスタード・インデックスのルールです。UniqueIdentifierのNewSequentialIdクラスター化インデックス

は(注:私は主キーまたはクラスタ化インデックスとしてのUniqueIdentifierを使用しての長所と短所についての議論をしたくないことに関するウェブ上の情報のトンがあります。これは、その議論ないです。。。だからここ)

は私が心配しているシナリオです:

は、私は、クラスタ化インデックスと主キーとしてのUniqueIdentifierを持つテーブルがあるとします。 ColAと呼ぶことができます。 ColAのデフォルト値をNewSequentialId()に設定しました。

{72586AA4-D2C3-440D-A9FE-CC7988DDF065}
{72586AA4-D2C3-440D-A9FE-CC7988DDF066}
{72586AA4-D2C3-:そのNewSequentialId()私は3つの連続行を挿入を使用

440D-A9FE-CC7988DDF067}

次に、サーバーを再起動します。 docs for NewSequentialIdは、「Windowsを再起動すると、GUIDは低い範囲から再開できますが、依然としてグローバルに一意です」と述べています。

したがって、次の開始点は前の範囲よりも低くなる可能性があります。

{35729A0C-F016-4645-ABA9-B098D2003E64}
{35729A0C-F016-4645-ABA9-B098D2003E65}
{35729A0C-F016-:

そこで再起動後、私は3つの以上の値を挿入します4645-ABA9-B098D2003E66}

(私はguidがデータベースにどのように表現されているかわかりませんが、これは3で始まり、前のものは7で始まり、3は3より小さい7つのもの。)

クラスタード・インデックスの途中で、インデックスの再マッピングが行われなければなりません。 (少なくとも私のDBAは私に言いました。)そして再起動するたびに、私は新しいUniqueIdentifierの範囲を他の以前の範囲の真ん中にするリスクがあります。

私の質問は次のUniqueIdentifierのセットが最後のセットよりも小さいため、すべての挿入によってクラスタ化されたインデックスがシャッフルされますか?

もしそうでなければ、なぜですか? SQL ServerはNewSequentialIdを使用していることを知っていますか?それを補う方法はいくつかありますか?

もしそうでなければ、私は次に何を挿入するかをどのように知っていますか?多分、次の100万人のインサートが3で始まるでしょう。あるいは、彼らは7で始まるかもしれません。それはどうやって知っていますか?

それはわかりませんが、すべてを順番に保ちます。この場合、再起動するとパフォーマンスが大幅に低下する可能性があります。 (再起動の影響を受けない独自のカスタムNewSequentialIdが必要だと思うのですが)それは正しいのですか?それとも私が気づいていない魔法がいくつかありますか?

EDIT:クラスタ化インデックスとしてのGUIDは、私の標準ではお勧めできません。私が上記のように、これは悪い考えである多くの理由があります。私はこれが別の理由であるかどうかを調べようとしています。

+0

"そうであれば、1回の再起動でパフォーマンスが大幅に低下する可能性があります。"つまり、IDENTITY()を使用したいのですが、それを聞きたくないのです。 – HardCode

答えて

1

通常、適切なFILL FACTORを使用してインデックスを作成し、このようなシナリオではすべてのページに空き領域を残します。つまり、空の領域がいっぱいになると、クラスタード・インデックスは再配列されます。

GUIDをクラスタ化されたキーとして議論したくないのは知っていますが、これが推奨される方法ではない理由の1つです。

何が起こるかは、ページ分割の量が増え、行を挿入し続けると非常に高いレベルのフラグメンテーションが発生し、インデックスを再作成する必要がありますライン内のパフォーマンス。あなたがあなた自身のNewSequentialID作成機能の作成を検討しているとき、トピックの完全な治療のために

は、サイドノートとして

Kim
Tripp's
Blog

よりも良いソースは、あなたはおそらく、ありません設計上の問題があり、計画を再考する必要があります。

+0

私はすでに彼女の投稿のいくつかを読んでいます。私の標準では、クラスタード・インデックスとしてのGUIDは強く推奨されません。私は理由のためのケースを構築しようとしています。 (したがって、この質問です。) – Vaccano

+0

フィルファクターに達すると、各インサートはすべて並べ替えを起こしますか? – Vaccano

+0

それは異なります。塗りつぶし係数はページ単位であるため、一度ページがいっぱいになったらはいです。それ以降のすべての挿入は、挿入が必要なページが一杯になった場合に再注文されます。 – JNK

関連する問題