2017-01-13 19 views
1

Postgres 9.6でDjango 1.8を使用しています。Django ArrayFieldを索引付けするかどうかを指定します。

packages = ArrayField(models.CharField(max_length = 200), blank = True) 

最初の質問は、私はそれにインデックスを追加する必要があります:私のモデルの 一つはArrayFieldを持っていますか? ドキュメント

現在、db_indexを使用するとbtreeインデックスが作成されます。これは、 は特に重要なクエリを提供していません。より有用なインデックス はGINインデックスであり、RunSQL操作を使用して作成する必要があります。

しかし、私はそれをどうすればいいのかはっきりしません。

"はい"の場合、2番目の質問は、 "db_index = True"をどこに配置するかです。 Djangoのドキュメントは言うことだように?:

packages = ArrayField(models.CharField(db_index = True, max_length = 200), blank = True) 
+0

あなたは何を決定しましたか? – e4c5

+0

あなたの答えに続いて、配列フィールドを検索しないようにしましたので、インデックスを追加しませんでした。配列フィールドを使うのは良い習慣ではなく、将来私がそれらを検索する必要はないと確信していない限り、将来的にそれらを避けることに少し失望しています。 –

+0

私はあなたにこれをするよう説得することができてうれしいです:-) – e4c5

答えて

2

よう 。これは、postgresql docsとは何ですか?

アレイはセットではありません。特定の配列要素を検索することは、データベースの設計誤りの である可能性があります。配列要素となるアイテムごとに行 を持つ別のテーブルを使用することを検討してください。これにより、 の検索がより簡単になり、多数の要素に対して拡張性が向上する可能性があります。

インデックスを追加する必要がありますか? これは、配列フィールドの検索を考えていることを意味します。 Postgresqlはあなたには勧めない。実際には、配列やCSVを1つの列に格納する必要はありません。あなたがするべきことは、テーブルを正規化することです。

「はい」の場合、2番目の質問は「db_index = True」を配置する場所ですか? 上記のため不自由な方。

関連する問題