27

このNEWID()関数は、既に行ったのと同じ ID を私に与えることはありませんか? a を選択するNEWID()と、「1」が返されたとします (例として)。再び「1」を返すことはありませんか? 無理ですか?

4

3 に答える 3

30

と の両方が、 type のグローバルに一意の値を提供しNEWID()ます。NEWSEQUENTIALID()uniqueidentifier

NEWID()ランダムなアクティビティが含まれるため、次の値は予測できず、実行が遅くなります。

NEWSEQUENTIALID()ランダムなアクティビティを含まないため、次に生成される値を予測でき(簡単ではありません!)、 よりも高速に実行されますNEWID()

したがって、(セキュリティ上の理由から) 次の値が予測されることを気にしない場合は、 を使用できますNEWSEQUENTIALID()。予測可能性が気になる場合、またはわずかなパフォーマンスの低下を気にしない場合は、 を使用できますNEWID()

ただし、厳密には、異なるマシンで生成された GUID が同じ値を持つ可能性はほとんどありません。実際には、それは不可能と見なされます。

さらに詳しい情報が必要な場合は、次の記事をお読みください: GUID が本当に一意であることを確認するには、GUID を生成するためのどの方法が最適ですか?

RFC 4122NEWID()に準拠していることに注意してください。もう 1 つの関数は、Microsoft のアルゴリズムを使用して値を生成します。

于 2015-01-29T15:15:01.977 に答える
11

同じマシンで実行NEWID()している場合、戻り値は常に一意になります。これは、計算に現在のタイム スタンプが組み込まれているためです。

ただし、別のマシン/システムでは、技術的には同じ ID を取得できますが、その可能性は非常に低いため、今日の SQL DB コミュニティは基本的にそれが不可能であることを認めています。マイクロソフトは多かれ少なかれ、その評判に頼ってきました。

関連している

于 2016-02-09T15:45:11.023 に答える