Django 1.11ではデータベースインデックスを作成する新しい方法が提供されています。これまでは、各分野でのdb_index=True
を持っていた:Django 1.11のデータベースインデックス:db_true、indexes、およびindex_togetherの違い
# example 1
class Person(models.Model):
name = models.CharField(db_index=True)
age = models.IntegerField(db_index=True)
今、私たちはmodels.Index
とclass Meta
ブロック内indexes
を宣言する可能性がある - あるいはindex_together
を。
1.例1からのコードは、以下の例2と同じことをやっている:私は2つの疑問を持っていると述べた
?# example 2
class Person(models.Model):
name = models.CharField()
age = models.IntegerField()
class Meta:
indexes = [
models.Index(fields=['name']),
models.Index(fields=['age'])
]
2.どのような複数のフィールドとindex_together
とindex
について:まったく同じことをやって、以下の例3および4はありますか?
# example 3
class Person(models.Model):
name = models.CharField()
age = models.IntegerField()
class Meta:
indexes = [
models.Index(fields=['name', 'age'])
]
# example 4
class Person(models.Model):
name = models.CharField()
age = models.IntegerField()
class Meta:
index_together = [['name', 'age']]
1と2の間diferences、及び3と4の違いは何ですか?私は何が欠けていますか?どうもありがとう。
例1から例2に変更して 'makemigrations'を実行すると、Djangoは以前のすべてのインデックスをダンプして再作成します。これは期待されますか?どうして? – cuducos
私はそれについて少し分かりませんが、Djangoは同じことを達成してもそれらの機能がどのように関連しているか分かりません。 マイグレーションが計算されているとき、Djangoは 'db_index = True'か' index_together'を削除したことに気付きます。これはインデックスの削除を意味します。同時に、Djangoはあなたが 'idexes'を追加したことに気づき、それを作成します。それはちょうど互いを関連付けることができないようです。 これを行うことで再作成される大量のインデックスがない限り、これは問題にはなりません。特定のケースを評価する必要があります。 –
新しい 'indexes'機能は単に' db_index'と 'index_together'を一般化しているので、驚いています。彼らは新しいものにそれらを扱う古典的な方法を翻訳して、Djangoに同等であることを伝えるいくつかのチェックを追加することができました。私はなぜ彼らがこのようにそれらを処理しないという決定をしたのか分からないいくつかの余分な技術的な理由があると思います。他の誰かがここで光を当てるかもしれない。 –