Wie kann ich in Django einen Datenbankindex ohne Berücksichtigung der Groß- und Kleinschreibung erstellen?

8

Ich verwende Django, um einige Datenbanktabellen zu erstellen:

%Vor%

Ich führe dann Suchabfragen durch, um die passende Zeile mit der korrekten term zu finden, die ohne Berücksichtigung der Groß- / Kleinschreibung übereinstimmt. Zum Beispiel:

%Vor%

Diese Lookup-Klausel wird in SQL wie folgt übersetzt:

%Vor%

Bei Postgres kann ich eine EXPLAIN Abfrage auf dem obigen durchführen, und ich bekomme diesen Abfrageplan:

%Vor%

Da das Feld term nicht indiziert ist und nicht nach einer Fall-normalisierten Methode indiziert wird, muss die obige Abfrage eine langsame Seq [utual] -Suchoperation über alle Datenbankzeilen hinweg durchführen.

Dann füge ich einen einfachen case-normierten Index ein, zum Beispiel:

%Vor%

Die obige Abfrage läuft jetzt etwa 6x schneller ab:

%Vor%

Meine Frage ist: Wie kann ich die Erstellung fortgeschrittener DB-Indizes in die Django-Modellverwaltungsbefehle einfügen?

    
BillyBBone 03.09.2013, 17:18
quelle

3 Antworten

3

Vor Django 1.9 (noch nicht veröffentlicht) könnten Sie den Befehl sqlcustom verwenden, aber wenn Sie sich die Entwicklerdokumentation für das kommende 1.9 ansehen, werden Sie sehen, dass dieser Befehl auffallend fehlt.

Also:

  • In & lt; = 1.8. *, @ daniel-rucci's Antwort trifft zu. Stellen Sie Ihre SQL in ein SQL-Verzeichnis und es wird in nicht-deterministischer Reihenfolge ausgeführt.
  • In & gt; = 1.9 müssen Sie die neue RunSQL-Funktion als Teil einer Migration. Sie können dies auch in 1.7 oder 1.8 tun, wenn Sie dies wünschen.
mlissner 26.08.2015 14:10
quelle
3

Django 1.11 (2.0 sollte auch in Ordnung sein) + PostgreSQL:

  1. Erstellen Sie zuerst eine leere Migration:

    %Vor%
  2. Django verwendet UPPER für ungenaue Suchvorgänge. Erstellen Sie daher eine Migration, um einen UPPER(yourField) index hinzuzufügen:

    %Vor%
Max Malysh 14.12.2017 23:45
quelle
2

Um benutzerdefinierte SQL in die Django-Modellverwaltungsbefehle einzufügen, django- admin.py sqlcustom

Sie würden eine SQL-Datei mit Ihrem Erstellungsindex in <app_name>/sql/<model_name>.sql

einfügen

Aus den Dokumenten, wenn sie angewendet werden:

  

Die SQL-Dateien werden direkt nach der Installation in die Datenbank piped   Die Tabellenerstellungsanweisungen der Modelle wurden ausgeführt. Verwenden Sie diese SQL   haken, um Tabellenänderungen vorzunehmen oder SQL-Funktionen einzufügen   die Datenbank.

Und Sie können die benutzerdefinierte SQL für jede App anzeigen, indem Sie manage.py sqlcustom <app_name>

ausführen     
Daniel Rucci 22.01.2014 17:28
quelle