このNEWID()
関数は、既に行ったのと同じ ID を私に与えることはありませんか? a を選択するNEWID()
と、「1」が返されたとします (例として)。再び「1」を返すことはありませんか? 無理ですか?
3 に答える
と の両方が、 type のグローバルに一意の値を提供しNEWID()
ます。NEWSEQUENTIALID()
uniqueidentifier
NEWID()
ランダムなアクティビティが含まれるため、次の値は予測できず、実行が遅くなります。
NEWSEQUENTIALID()
ランダムなアクティビティを含まないため、次に生成される値を予測でき(簡単ではありません!)、 よりも高速に実行されますNEWID()
。
したがって、(セキュリティ上の理由から) 次の値が予測されることを気にしない場合は、 を使用できますNEWSEQUENTIALID()
。予測可能性が気になる場合、またはわずかなパフォーマンスの低下を気にしない場合は、 を使用できますNEWID()
。
ただし、厳密には、異なるマシンで生成された GUID が同じ値を持つ可能性はほとんどありません。実際には、それは不可能と見なされます。
さらに詳しい情報が必要な場合は、次の記事をお読みください: GUID が本当に一意であることを確認するには、GUID を生成するためのどの方法が最適ですか?
RFC 4122NEWID()
に準拠していることに注意してください。もう 1 つの関数は、Microsoft のアルゴリズムを使用して値を生成します。
同じマシンで実行NEWID()
している場合、戻り値は常に一意になります。これは、計算に現在のタイム スタンプが組み込まれているためです。
ただし、別のマシン/システムでは、技術的には同じ ID を取得できますが、その可能性は非常に低いため、今日の SQL DB コミュニティは基本的にそれが不可能であることを認めています。マイクロソフトは多かれ少なかれ、その評判に頼ってきました。
関連している