UUIDプライマリキーを使用するテーブルが8つあり、そのうち7つにUUID外部キーがあります。 UUIDの代わりにBIGSERIALを使用する方がパフォーマンスが良いでしょうか?
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
で十分です(であれば、本当に十分です)...
関連: