私は、PostgreSQLデータベースを使用してHerokuのRailsにアプリケーションを作成しました。PostgreSQLのUUIDは主キーとして索引のパフォーマンスが悪いですか?
さまざまな場所でデータを作成できるモバイルデバイスと同期できるように設計された2つのテーブルがあります。そのため私は、自動インクリメントの主キーに加えてGUIDを格納する文字列であるuuidフィールドを持っています。 uuidは、サーバーとクライアントの間で通信されるものです。
サーバー側で同期エンジンを実装した後で、これはパフォーマンス上の問題につながります。これは、uuid < - > idの間で常にマッピングする必要があるときです(オブジェクトを書き込むときには、保存する前に、データを送り返すときは反対に)。
私は現在、主キーとしてUUIDを使用することに切り替えることについて考えています。これは、書き込みと読み込みをはるかに簡単かつ高速にします。
クラスタ化された主キー索引を使用すると、主キーとしてUUIDが悪いインデックスのパフォーマンス(インデックスの断片化)を示すことがあります。 PostgreSQLはこの問題を抱えていますか、またはUUIDを主キーとして使用できますか?
私はすでに今日のUUID列を持っていますので、私は通常のID列を削除するので、ストレージが賢明です。
'id'フィールドはデータベース内の他のリレーションによって外部キーとして使用されていますか?あなたが説明した理由でプライマリキーがシリアルタイプでなければならないと信じているので、この「id」フィールドだけを守っていますか? –
合成プライマリ・キーによるクラスタリングは、これらのpkey値の範囲を問い合せる頻繁なアクセス・パスを持つ場合にのみ有益です。これは現実世界ではまれです。 UUIDは主キーの完全に細かい型です。テキスト型と比較して十分にコンパクトで(16バイト)高速です。 – dbenhur
@Joshua IDフィールドは外部キーとして使用され、UUIDフィールドは通信時に関係を参照するのに使用される通常のフィールドとしてのみ使用されます(常にそれらの間で変換する必要があります) – thejaz