索引付けが役立つことと、クエリの高速化のみを知っています。
次の2つの違いは何ですか?
1. class Meta:
indexes = [
models.Index(fields=['last_name', 'first_name',]),
models.Index(fields=['-date_of_birth',]),
]
2. class Meta:
indexes = [
models.Index(fields=['first_name',]),
models.Index(fields=['last_name',]),
models.Index(fields=['-date_of_birth',]),
]
最初の例では、last_name
およびfirst_name
フィールドに単一のインデックスを作成します。
indexes = [
models.Index(fields=['last_name', 'first_name',]),
]
姓と名を一緒に検索する場合、または姓のみを検索する場合に便利です(last_name
がインデックスの最初のフィールドであるため)。
MyModel.objects.filter(last_name=last_name, first_name=first_name)
MyModel.objects.filter(last_name=last_name)
ただし、first_nameを単独で検索する場合には役立ちません(first_name
はインデックスの最初のフィールドではないため)。
MyModel.objects.filter(first_name=first_name)
2番目の例では、first_name
フィールドにインデックスを作成し、last_name
フィールドに別のインデックスを作成します。
indexes = [
models.Index(fields=['first_name',]),
models.Index(fields=['last_name',]),
]
コード内の名または姓に基づいて検索を行う場合に役立ちます
MyModel.objects.filter(first_name=search)
MyModel.objects.filter(last_name=search)
Django Model Indexは、Django 1.11で導入されました
Model.indexesとは:
デフォルトでは、インデックスは各列の昇順で作成されます。列の降順でインデックスを定義するには、フィールド名の前にハイフンを追加します。
クエリの場合、models.Index(fields=['last_name', 'first_name','-date_of_birth',]),
は_(last_name, first_name, date_of_birth DESC).
_でSQLを作成します
質問に移動します
2つのクエリの違いを尋ねましたが、
両方ともmodels.Index(fields=['-date_of_birth',]),
を取ります
少なくとも1つが割り当てられた変数をオーバーライドするためです。あなたの質問から少なくともdateofbirth
なので、上記の2行を上書きします。
ドキュメントごとに推奨される方法は次のとおりですインデックスフィールドは単一のリストにある必要があるためです。so DjangoはフィールドのリストからSQLインデックスを準備します...
_models.Index(fields=['last_name', 'first_name', '-date_of_birth']),
_