2009-01-13 7 views
5

Die Schönheit von ORM lullte mich in einen einschläfernden Schlaf. Ich habe eine bestehende Django-App mit einem Mangel an Datenbankindizes. Gibt es eine Möglichkeit, automatisch eine Liste von Spalten zu generieren, die indexiert werden müssen?Gibt es eine Möglichkeit, automatisch eine Liste von Spalten zu generieren, die indexiert werden müssen?

Ich dachte, vielleicht einige Middleware, die protokolliert, welche Spalten in WHERE-Klauseln beteiligt sind? Aber gibt es irgendetwas in MySQL eingebaut, das helfen könnte?

Antwort

4

Ja, gibt es.

Wenn man sich die slow query log einen Blick darauf werfen, gibt es eine Option --log-queries-not-using-indexes

+0

Schade, es gibt keine Post über generische Lösung, wie die Middleware erwähnt. – ohnoes

+0

Die oben erwähnte Middleware zeigt nur Spalten an, die Kandidaten für Indizes sind, während das langsame Abfrageprotokoll Ihnen tatsächliche Vorschläge anzeigt (die sich aufgrund der MySQL-spezifischen Serveroptimierungen unterscheiden können). – zgoda

4

Nr

Indizes nolens volens für alle „langsam“ Abfragen hinzufügen, wird auch Einsätze verlangsamen, Aktualisierungen und Löschungen.

Indizes sind ein Balanceakt zwischen schnellen Abfragen und schnellen Änderungen. Es gibt keine allgemeine oder "richtige" Antwort. Es gibt sicherlich nichts, was dies automatisieren könnte.

Sie müssen die Verbesserung für Ihre gesamte Anwendung messen, wenn Sie Indizes hinzufügen und ändern.

+0

In meinem Fall wie in vielen Web-Anwendungen ist es schwer lesbar - Schreibvorgänge sind nur für Administratoren und Tabellengröße ist ziemlich klein. Würden Sie in diesem Fall zustimmen, dass das Hinzufügen von Indizes zu allen Spalten, die in Suchvorgängen verwendet werden, von Vorteil wäre? –

+0

@andybak: Willy-Nilly Indexierung ist ein schlechter Plan. Einige Indizes scheinen eine gute Idee zu sein, müssen aber wirklich profitieren. Zwei Regeln: (1) Eine Sache auf einmal ändern; (2) Messen Sie vorher und nachher. Schiesse nie einen Haufen Veränderungen und hoffe. –

Verwandte Themen