web-dev-qa-db-ja.com

SQLサーバーのGUID)のデータ型は何ですか?

GUIDは、SQL(特にMS SQL Server 2008)によってどのように内部的に保存および比較されますか?それは数字ですか、それとも文字列ですか?また、GUIDを主キーとして使用すると、パフォーマンスに大きな影響がありますか?

ここで説明したクラスタリングの問題に加えて: 特にパフォーマンスに関して、GUIDを主キーとして使用するためのベストプラクティスは何ですか?

128ビットの数値である必要があると思います( ここ で説明されています)が、SQLサーバーでどのように実装されているかについてのモードの詳細が見つかりません。

9
Ondrej Peterka

GUID構造 とまったく同じ16バイト:

typedef struct _GUID {
  DWORD Data1;
  Word  Data2;
  Word  Data3;
  BYTE  Data4[8];
} GUID;
8
Remus Rusanu

パフォーマンス面では、SQLServerの通常のGUIDINTよりも低速です

GUIDを使用する場合は、データ型としてuniqueidentifierの代わりにvarcharを使用してください。 Microsoftは、それをどのように実装するかについては言及していません。データ型としてuniqueidentifierを使用すると、速度が最適化されます。

整数の速度を犠牲にすることなく主キーとしてGUIDを使用するには、GUIDsequentialを作成します。 uniqueidentifierデータ型をPKとして定義し、デフォルトをNEWSEQUENTIALID()に設定します。

詳細については、 NEWSEQUENTIALID(Transact-SQL) を参照してください。

連続するGUID値がパフォーマンスにどのように役立つかについては、 主キーとしてのGUIDのコスト を参照してください。

13
MikeLim

Nvarchar(128)を使用することもできます。

次善のオプションはbinary(16)列です。

標準GUIDの長さは正確に16バイトです。文字列として保存する必要がある場合、長さは実際にはどのようにエンコードするかによって決まります。ハイフンのない16進数(別名基数16エンコーディング)として、32文字(1バイトあたり2桁の16進数)になります。

1
Alireza Zamani