3

postgres で配列を使用するためにdjango-dbarrayモジュールを使用しています。私は postgres 配列に関していくつかの調査を行ってきましたが、一部の開発者は、X 値を格納する postgres 配列の使用を推奨しないと述べています。時々、これは 10 で、私は 30 も聞いたことがあります。パフォーマンスが低下し始める前に、いくつの値を配列に格納できるか、または格納する必要があるかについて、コンセンサスはありますか?

参考までに、上記のDBは主に読み取り専用のDBです。

中間テーブルを使用する場所と postgres 配列を使用する場所を決定しようとしています。

追加の関連する質問: テーブル内の列に対してインデックスを作成する場合、その列には配列値が格納されます (bigint [] としましょう)。配列内に格納されている値にはインデックスが付けられず、配列自体のみがインデックス付けされることに気付きました (これは C ポインターのようなものであると想定しています)。単純に中間テーブルを使用する場合と比較して、これはどのくらい効率的ですか?

値に対して結合を作成するか、where 句に特定の値の一部を含める必要がある場合があります。パフォーマンスの一部が低下する可能性があり、結合を作成する必要がある場合はいつでも中間テーブルを使用する方がよいのではないかと懸念しています。

最後に、dbarray を使用している場合、標準の django ORM で中間テーブルを使用する場合と比較して、その効率はどうなりますか (上記の質問の where 句に結合がないと仮定します)。

ありがとうございました

4

1 に答える 1

3

PostgreSQLintarrays をサポートしGINGiSTインデックスを作成します。これにより、次のようなクエリを実行できます。

SELECT  *
FROM    mytable
WHERE   myarray @> ARRAY[1, 2]
-- returns arrays which contain 1 AND 2

またはこれ:

SELECT  *
FROM    mytable
WHERE   myarray && ARRAY[1, 2]
-- returns arrays which contain 1 OR 2

効率的。

最初のクエリは、正規化されたスキーマを使用して効率的に書き直すのはやや困難です。

于 2012-05-22T19:19:05.410 に答える