/ / Django: Ajout de db_index à une table existante - django, base de données

Django: Ajout de db_index à une table existante - django, base de données

J'ai un modèle Django auquel je veux ajouter un db_index=True dans un champ après la création de la table.

Jango ne crée pas de migration. L’index n’est donc pas créé. Si la table est inexistante et créée en premier, Django crée l’index.

J'ai lu Django: db_index et makemigrations, mais je me demande si c’est une bonne idée de créer manuellement un fichier de migration?

J'utilise MySQL. Quelle est la meilleure pratique de Django à ce sujet?

Réponses:

5 pour la réponse № 1

Oui. Il est parfaitement acceptable et acceptable, et (parfois) même la meilleure pratique consiste à utiliser une migration manuscrite à cet effet. Il existe même une commande spéciale qui crée une migration vide uniquement pour ces types de problèmes.

python manage.py makemigrations --empty --name create_table_index

Et éditez-le comme dans l'exemple posté dans votre lien:

class Migration(migrations.Migration):

dependencies = [
("your_app", "0001_initial"), # or last mig
]

operations = [
migrations.RunSQL("CREATE INDEX idx_column ON my_table (my_column)"),
# this format should also work for mysql
]

Pour les tables essentielles à votre missionl’application, certaines équipes ops préfèrent ajouter l’index à la main afin d’avoir un meilleur contrôle sur le timing de l’impact de la création de cet index sur l’application. Mais c'est généralement une question de préférence d'équipe