私はPostgreSQLを初めて使用し、データベース全般についてはやや新規です。 Postgresで [〜#〜] uuid [〜#〜] 値にインデックスを付ける方法は確立されていますか?ハッシュ関数を使用することと、トライを使用することは、自動的に使用される組み込みのものがない限り、分割されています。私が使用するものは何でも、膨大な量のデータを処理することになります。
SP-Gist演算子ファミリの "text_ops"は、トライを使用してインデックスを作成します。 UUIDは非常に長く、非常に似ていないため、完全一致検索のみを実行する場合でも、これらのサウンドは魅力的です。
ハッシュオプションもあります。ハッシュはO(1)であり、もちろん等号以外の比較を行う必要はありませんが、UUIDは非常に長いため、ハッシュを生成すると多くの時間が無駄になると思います。
または、これはシステムに依存しすぎて詳細を使用しているものですか?
ほとんどの場合、bigserialを使用したいのですが、uuidこのため。複数のサーバーが異なるデータベースを使用している可能性があるため、uuidが必要です。そのため、一意のbigintがあることは保証されません。サーバーごとに異なるシーケンス(およびシード)を使用することもできますが、それでもUUIDほど柔軟ではありません。たとえば、IDとその参照をどこにでも変換せずに、データベースエントリをあるサーバーから別のサーバーに移行することはできません。
PostgreSQLの組み込み uuid
データ型 を使用し、 create で通常のBツリーインデックスを使用します。
特別なことをする必要はありません。これにより、最適なインデックスが得られ、uuid
フィールドも現在実用的な限りのコンパクトな形式で格納されます。
(バージョン10より前のPostgreSQLのハッシュインデックスはクラッシュセーフではなく、実際にはbツリーよりもパフォーマンスが劣る傾向がある歴史的な遺物でした。それらを避けてください。PostgreSQL10では、クラッシュセーフになり、いくつかありました。パフォーマンスの改善が行われたため、検討する必要があるかもしれません。)
何らかの理由でuuid
タイプを使用できなかった場合は、通常、テキスト表現にbツリーを作成するか、できれば、uuidのbytea
表現を作成します。
PostgreSQLでは、ハッシュインデックスの動作が欠落しています。 PostgreSQLは、ハッシュインデックスが必要であること、およびハッシュインデックスのコードが古くてカビがあることを認識していますが、誰かがやって来てハッシュインデックスのオーバーホールを行うのを待っているため、ハッシュインデックスを削除しません。このスレッドを参照してください: