NEWSEQUENTIALIDはデータベース内で一意ですか? NEWSEQUENTIALIDを使用してデータベース内の多くのテーブルを計画し、同時に挿入して、異なるテーブルにあるかどうかに関係なく、すべてのGUIDが一意になるようにします。
通常のNEWID()はデータベースの一意性を保証します。重複が発生する可能性は、小惑星/雷に打たれる可能性ですが、断片化の問題を軽減するものではありません。
この記事ではMacアドレスについて説明しますが、上記のデータベース固有の質問を指定します。 https://stackoverflow.com/questions/28404964/is-uniqueidentifier-unique-across-databases
Microsoft Docs によると、値はコンピューターごとに一意であり、問題のコンピューターにネットワークカードがある限り、複数のコンピューター上でも一意です(生成アルゴリズムは、ネットワークカードから取得したいくつかの値を使用すると想定されます) GUIDを生成する)
NEWSEQUENTIALIDを使用して生成された各GUIDは、そのコンピューター上で一意です。NEWSEQUENTIALIDを使用して生成されたGUIDは、ソースコンピューターにネットワークカードがある場合にのみ、複数のコンピューター間で一意です。
これ以外にも、その一意性に関するいくつかの注意点があるようです。
UuidCreateSequential関数には、ハードウェアの依存関係があります。 SQL Serverでは、データベース(含まれているデータベースなど)を他のコンピューターに移動すると、順次値のクラスターが発生する可能性があります。 Always OnとSQL Databaseを使用する場合、データベースが別のコンピューターにフェールオーバーすると、連続する値のクラスターが発生する可能性があります。
idCreateSequential のページでは、ネットワークカードが存在する場合、関数がコンピューター間で一意であることが保証されていることもわかります。
イーサネット/トークンリングアドレスを持つコンピューターは、グローバルに一意であることが保証されているUUIDを生成します。
Microsoftのドキュメント によると、.
NEWSEQUENTIALID
GUIDこれは、任意の値よりも大きいGUID Windowsの起動以降、指定されたコンピューター上でこの関数によって以前に生成されました。Windowsの再起動後、GUIDはより低い範囲から再開できますが、それでもグローバルに一意です
主にランダムなGUIDに関連する断片化の問題が原因で、組み込みのランダム性に依存していない場合は、NEWSEQUENTIALID
よりもNEWID()
を使用することをお勧めします。主キーでNEWID()
を使用する際のいくつかの落とし穴について、Kimberly Trippによる 素晴らしい記事 があります。
ドキュメントに記載されているように、NEWSEQUENTIALID
が一意性を保証しない場合があります。
UuidCreateSequential関数には、ハードウェアの依存関係があります。 SQL Serverでは、データベース(含まれているデータベースなど)を他のコンピューターに移動すると、順次値のクラスターが発生する可能性があります。 Always OnとSQL Databaseを使用する場合、データベースが別のコンピューターにフェールオーバーすると、連続する値のクラスターが発生する可能性があります。
ただし、質問のフレージングから判断すると、これは単一のデータベースサーバーに含まれるようです。
NEWSEQUENTIALID
を予測できることにも注意する必要があります(ここでは適用されません)。そのため、GUIDのプライバシーが懸念される場合、これも問題になる可能性があります。