Generiert Django automatisch Indizes für Fremdschlüsselspalten?

75

Generiert Django automatisch Indizes für Fremdschlüssel oder hängt dies nur von der zugrunde liegenden DB-Richtlinie ab?

GabiMe
quelle
2
hängen vom db_indexParameter in ForeignKey ab, der standardmäßig True ist.
Sławomir Lenart

Antworten:

109

Django erstellt automatisch einen Index für alle models.ForeignKeySpalten.

Aus der Django-Dokumentation :

Ein Datenbankindex wird automatisch auf dem erstellt ForeignKey. Sie können dies , indem Sie deaktivieren db_indexzu False. Möglicherweise möchten Sie den Overhead eines Index vermeiden, wenn Sie einen Fremdschlüssel aus Gründen der Konsistenz anstelle von Verknüpfungen erstellen oder wenn Sie einen alternativen Index wie einen Teil- oder Mehrspaltenindex erstellen.

Luke Sneeringer
quelle
Ich konnte keinen Hinweis auf diese Tatsache finden. Irgendein Hinweis darauf?
GabiMe
1
Wenn ./manage.py sql appnameSie ausführen, werden die SQL-Anweisungen für die Indexerstellung angezeigt. Sie kommen direkt nach der SQL für die Erstellung der letzten benötigten Tabelle.
Luke Sneeringer
7
@LukeSneeringer, ich bin mir nicht sicher, ob der von Ihnen angegebene Befehl zum Anzeigen von Indizes verwendet wurde, aber er funktioniert nicht mehr. Führen Sie stattdessen ./manage.py sqlindexes appnamedie Indizes selbst aus.
Jesse Beder
4
Es ist auch möglich, die Erstellung eines Index für einen ForeignKey zu deaktivieren: code.djangoproject.com/ticket/13730
Jeff Bauer
1
@ JesseBeder: Das ./manage.py sqlindexes appnamefunktioniert in den letzten Django-Versionen nicht mehr.
SaeX