128ビットのUUIDを保存するために、複数の保存オプションがあります。
インデックス作成の観点から、どれが最も効率的ですか? dbが1、2、3のどれが最適な候補である専用のUUIDタイプをサポートしていない場合?
専用のuuid
タイプは、PostgreSQLに最適です。他のDBで言うのは難しい-単純なバイト型よりも効率的に格納されないuuid
型を実装することは不可能ではありません。
PostgreSQLでも、bytea
タイプがない場合、uuid
はUUIDを格納するための合理的な方法です。他のDBでは、バイナリデータの格納方法によって異なります。
可能な場合は、16進ダッシュを使用することを強く避けます。比較、並べ替え、保存を行うと効率が低下します。
つまり、「(2)や(3)ではない」ということです。ずっと。サポートされている場合は(4)を使用し、そうでない場合は(1)を使用します。
優先順:4,1,2,3 SQL Serverを使用する場合は、クラスタリングキーとしてUUIDを使用しないでください。これは、断片化が悪くなるだけでなく、クラスタリングキーがすべての非クラスタ化インデックスで使用され、それらのバイトを各インデックス行。 NEWSEQUENTIALIDを使用することで断片化を軽減できますが、他のインデックスの膨張を防ぐために、通常、クラスタリングキーにはbingint IDをGUIDよりも優先します。
1から2を選択することの違いは、データベースが1つの列の固定配列に対して2つの基本型の列をより効率的に処理するかどうかに依存します。ダミーデータでテストするのは簡単です。クエリの速度とインデックスおよびデータのサイズを確認します。 Small + fastが最適です。
ネイティブにサポートされているデータ型は、その製品のクライアントとしてまとめられるものよりも製品で最適化されると想定する必要があります。その後、バイト数が最も小さいものが何であっても、ページあたりの最大行数が得られます。