Je sais seulement que l'indexation est utile et qu'elle interroge plus rapidement.
Quelle est la différence entre les deux suivants?
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',]),
]
Le premier exemple crée un index unique sur le last_name
et first_name
champ.
indexes = [
models.Index(fields=['last_name', 'first_name',]),
]
Cela sera utile si vous recherchez ensemble le nom et le prénom, ou le nom de famille lui-même (car last_name
est le premier champ de l'index).
MyModel.objects.filter(last_name=last_name, first_name=first_name)
MyModel.objects.filter(last_name=last_name)
Cependant, il ne sera pas utile pour rechercher le prénom par lui-même (car first_name
n'est pas le premier champ de l'index).
MyModel.objects.filter(first_name=first_name)
Le deuxième exemple crée un index pour le first_name
champ et un index séparé pour le last_name
champ.
indexes = [
models.Index(fields=['first_name',]),
models.Index(fields=['last_name',]),
]
Il sera utile si vous effectuez des recherches basées sur le prénom ou le nom de famille dans votre code
MyModel.objects.filter(first_name=search)
MyModel.objects.filter(last_name=search)
Django Model Index a été introduit dans Django 1.11
qu'est-ce que Model.indexes:
Par défaut, les index sont créés avec un ordre croissant pour chaque colonne. Pour définir un index avec un ordre décroissant pour une colonne, ajoutez un tiret avant le nom du champ.
Pour votre requête, models.Index(fields=['last_name', 'first_name','-date_of_birth',]),
créerait du SQL avec (last_name, first_name, date_of_birth DESC).
Passons à votre question,
vous avez demandé la différence entre 2 requêtes,
les deux prendront models.Index(fields=['-date_of_birth',]),
car au moins l'un remplacera les variables attribuées. le moins de votre question est dateofbirth
donc il remplacera au-dessus de deux lignes.
donc selon la documentation, la méthode préférable est, parce que le champ d'indexation doit être dans une seule liste .. donc Django préparera l'indexation SQL à partir de la liste des champs ...
models.Index(fields=['last_name', 'first_name', '-date_of_birth']),