2008-08-20 8 views
8

私たちはいくつかのGUIDをMS SQLデータベースに保存しています。 Guid.ToString()を実行してからvarchar(64)に渡すレガシーコードがあります。固有の識別子パラメータを使用してコードを渡す新しいコードがあります。 MS SQL Managementスタジオを使用して結果を見ると、彼らは異なって見えます。最初の3つのブロックのバイト順は逆ですが、最後のブロックは同じままです。どうして? SQL ServerではなぜGuid.ToString()はバイト順を逆にしますか?

答えて

8

UNIQUEIDENTIFIERフィールドをインデックス化することができ、そのため「後方」はあります。

GUIDはマシン固有の情報と「イベント時」の両方の情報から生成できます。

.NETのデフォルトGUIDはランダムですが、にextern呼び出しでそれからシーケンシャルGUIDを取得することができます。

[DllImport("rpcrt4.dll", SetLastError = true)] 
static extern int UuidCreateSequential(out Guid guid); 

これが連続しているあなたのMACアドレス(MSDN docs)に基づいて、あなたのGUIDを取得します。

あなたはこれらのシーケンシャルGUIDを.ToString()なら、あなたは残りの部分が一定しながら、文字列の最初の部分は、異なる表示されます。

これは、GUIDの間の等価性チェックが速く(違いは開始時になるように)と切り捨てもののために変化を改善します。

列を検索するためのSQLServerは、電話帳や辞書と同様にインデックスを構築します。 "Over *"で始まる単語を検索する方が、 "* flow"で終わる単語を見つけるよりもはるかに迅速です。

これは、前後にそれらを保存するように、SQL Serverの任意のシーケンシャルGUIDは、最初の繰り返し値を格納する必要があることを意味します。

関連する問題