85 votes

Ajouter des Indexes (db_index=True)

Je suis en train de lire un livre sur le style de codage en Django et une chose dont ils discutent est db_index=True. Depuis que j'ai commencé à utiliser Django, je n'ai jamais utilisé cette fonction car je ne suis pas vraiment sûr de ce qu'elle fait.

Ma question est donc, quand faut-il envisager d'ajouter des index ?

169voto

Burhan Khalid Points 50578

Ce n'est pas vraiment spécifique à Django; cela concerne davantage les bases de données. Vous ajoutez des index sur des colonnes lorsque vous souhaitez accélérer les recherches sur cette colonne.

En général, seule la clé primaire est indexée par la base de données. Cela signifie que les recherches utilisant la clé primaire sont optimisées.

Si vous effectuez de nombreuses recherches sur une colonne secondaire, envisagez d'ajouter un index à cette colonne pour accélérer les choses.

Gardez à l'esprit que, comme la plupart des problèmes d'échelle, cela s'applique uniquement si vous avez un nombre important de lignes d'un point de vue statistique (10 000 n'est pas considéré comme important).

De plus, à chaque fois que vous faites une insertion, les index doivent être mis à jour. Faites donc attention à la colonne sur laquelle vous ajoutez des index.

Comme toujours, vous ne pouvez optimiser que ce que vous pouvez mesurer - utilisez donc l'opérateur EXPLAIN et vos journaux de base de données (en particulier tout journal de requêtes lentes) pour découvrir où les index peuvent être utiles.

7 votes

Cela peut aider (beaucoup) github.com/django-debug-toolbar/…

1 votes

Les index peuvent également accélérer le tri. Cet article porte sur MS SQL Server mais le même principe s'applique à n'importe quelle base de données.

0voto

Mac Rathod Points 611

La réponse ci-dessus est correcte mais dans certains cas où la recherche est effectuée sur des colonnes qui ont seulement le datatype varchar comme email. Là, vous devez ajouter un index.

Voici la façon de le faire:

Index(name='covering_index', fields=['headline'], include=['pub_date'])

reference from https://docs.djangoproject.com/en/3.2/ref/models/indexes/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X