Solo sé que la indexación es útil y consulta más rápido.
¿Cuál es la diferencia entre los dos siguientes?
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',]), ]Django Model Index se introdujo en Django 1.11
qué es Model.indexes:
De forma predeterminada, los índices se crean con un orden ascendente para cada columna. Para definir un índice con un orden descendente para una columna, agregue un guión antes del nombre del campo.
Para su consulta, models.Index(fields=['last_name', 'first_name','-date_of_birth',]), crearía SQL con (last_name, first_name, date_of_birth DESC).
Pasemos a tu pregunta,
usted preguntó diferencia entre 2 consultas,
ambos tomarán models.Index(fields=['-date_of_birth',]),
porque al menos uno anulará las variables asignadas. de su pregunta, lo mínimo es la fecha de dateofbirth , por lo que anulará las dos líneas anteriores.
entonces, según la documentación, el método preferible es, porque el campo de indexación debe estar en una sola lista ... entonces django preparará la indexación de SQL a partir de la lista de campos ...
models.Index(fields=['last_name', 'first_name', '-date_of_birth']),Ejemplo 1:
El primer ejemplo crea un índice único en el campo last_name y first_name .
indexes = [ models.Index(fields=['last_name', 'first_name',]), ] Será útil si busca el apellido y el nombre juntos, o el apellido solo (porque last_name es el primer campo en el índice).
MyModel.objects.filter(last_name=last_name, first_name=first_name) MyModel.objects.filter(last_name=last_name) Sin embargo, no será útil para buscar first_name por sí mismo (porque first_name no es el primer campo en el índice).
MyModel.objects.filter(first_name=first_name) # not usefulEjemplo 2:
El segundo ejemplo crea un índice para el campo first_name y un índice separado para el campo last_name .
indexes = [ models.Index(fields=['first_name',]), models.Index(fields=['last_name',]), ]Será útil si realiza búsquedas basadas en el nombre o apellido en su código
MyModel.objects.filter(first_name=search) MyModel.objects.filter(last_name=search)