web-dev-qa-db-ja.com

UUIDまたはBIGSERIAL外部キーPostgres

UUIDプライマリキーを使用するテーブルが8つあり、そのうち7つにUUID外部キーがあります。 UUIDの代わりにBIGSERIALを使用する方がパフォーマンスが良いでしょうか?

2
civ15

uuid を使用する必要な場合.
使用しない場合は使用しないでください。

bigint はいくつかの点で小さく、少し高速です。 8バイトと16バイトの違いはそれほど大きくありませんが、大きなテーブルと複数のインスタンスでは違いが積み重なっています。 (そして、小さなテーブルが最初からuuidまたはbigintのどちらかで意味をなすことはめったにありません。)

bigintは、通常、人間の目にも、人間の操作にも、数値がそれほど大きくならない場合の表現にも、はるかに簡単です。 UUIDには常に32文字の表現が必要です(オプションでダッシュを追加)。

同じテーブルに2つ(PKとFK)がある場合、行は16バイト増加します。これは、幅の狭い行では違いが生じる場合があり、幅の広い行では無視できる場合があります。 さらに重要なことに、関連するインデックスのサイズも大きくなります。 bigintのPKインデックスは1行あたり16バイト(8バイトのインデックスタプルオーバーヘッドを含む)を占めますが、uuidは24バイトです。 RAMが豊富に利用できない場合は、RAMに存在するいくつかのインデックスと、追い出されてストレージから繰り返し読み取られるインデックスの違いを意味します。そして実質的な違いになります。

bigintも必要ですか?多くの場合、4バイトのintegerで十分です(であれば、本当に十分です)...

関連:

1