sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLアレイを結合用に最適化できますか?

    いいえ、FKを配列に格納することは、汎用テーブルにとって決して良い考えではありません。まず第一に、あなたが通過で言及した事実があります:配列要素の外部キー制約は(まだ)実装されていません。これだけではアイデアが無効になるはずです。

    深刻なパフォーマンスの問題によって停止されたPostgres9.3の機能を実装する試みがありました。 pgsql-hackersでこのスレッドを参照してください。

    また、特定のユースケースでは配列を使用して読み取りパフォーマンスを向上させることができますが、書き込みパフォーマンスは急落します。考えてみてください。長い配列から単一の要素を挿入、更新、または削除するには、すべてのカンジされた要素の配列全体を含む新しい行バージョンを作成する必要があります。また、今後も深刻なロックの競合が発生します。

    テーブルが読み取り専用の場合 、アイデアはより理にかなっています。ただし、マテリアライズドビュー を検討します。 非正規化された配列を上に 正規化された多対多の実装の例:

    その間、MVはすべての結合テーブルを含め、1つのフラットテーブルを生成して、読み取りパフォーマンスをさらに向上させることができます(一般的なユースケースの場合)。このようにして、参照整合性をおよび取得します。 優れた読み取り(および書き込み)パフォーマンス-MVを管理するためのオーバーヘッドと追加のストレージを犠牲にして。




    1. Excelで小数点以下の桁数が最も多いものを見つける方法はありますか

    2. 2人以上のユーザーの一致する時間間隔を見つける方法

    3. Djangoは、既存のデータベーステーブルの主キーを自動的に作成します

    4. 条件が<>trueの場合にPostgreSQLがnull値を返さないのはなぜですか