web-dev-qa-db-ja.com

最も効率的なUUID列タイプは何ですか

128ビットのUUIDを保存するために、複数の保存オプションがあります。

  1. バイト[16]列
  2. 2つのbigint/long(64ビット)列
  3. cHAR(36)列-32桁の16進数+ 4つのダッシュ。
  4. uUIDデータベース固有の列(dbがサポートしている場合)

インデックス作成の観点から、どれが最も効率的ですか? dbが1、2、3のどれが最適な候補である専用のUUIDタイプをサポートしていない場合?

16
Vlad Mihalcea

専用のuuidタイプは、PostgreSQLに最適です。他のDBで言うのは難しい-単純なバイト型よりも効率的に格納されないuuid型を実装することは不可能ではありません。

PostgreSQLでも、byteaタイプがない場合、uuidはUUIDを格納するための合理的な方法です。他のDBでは、バイナリデータの格納方法によって異なります。

可能な場合は、16進ダッシュを使用することを強く避けます。比較、並べ替え、保存を行うと効率が低下します。

つまり、「(2)や(3)ではない」ということです。ずっと。サポートされている場合は(4)を使用し、そうでない場合は(1)を使用します。

16
Craig Ringer

優先順:4,1,2,3 SQL Serverを使用する場合は、クラスタリングキーとしてUUIDを使用しないでください。これは、断片化が悪くなるだけでなく、クラスタリングキーがすべての非クラスタ化インデックスで使用され、それらのバイトを各インデックス行。 NEWSEQUENTIALIDを使用することで断片化を軽減できますが、他のインデックスの膨張を防ぐために、通常、クラスタリングキーにはbingint IDをGUIDよりも優先します。

1から2を選択することの違いは、データベースが1つの列の固定配列に対して2つの基本型の列をより効率的に処理するかどうかに依存します。ダミーデータでテストするのは簡単です。クエリの速度とインデックスおよびデータのサイズを確認します。 Small + fastが最適です。

3
GilesDMiddleton

ネイティブにサポートされているデータ型は、その製品のクライアントとしてまとめられるものよりも製品で最適化されると想定する必要があります。その後、バイト数が最も小さいものが何であっても、ページあたりの最大行数が得られます。

1
Michael Green