it-swarm.com.de

Reihenfolge nach Spalte sollte Index haben oder nicht?

Ich habe der Tabelle Indizes hinzugefügt, die für das Suchergebnis verwendet werden. Ich zeige Ergebnisse in ASC- oder DESC-Reihenfolge. Also sollte diese Spalte einen Index haben oder nicht? Ich habe 2 weitere Indizes für diese Tabelle. Wie wirkt sich die Leistung aus, wenn ein Index für diese Spalte erstellt wird oder nicht?

38
Somnath Muluk

Ja, MySQL kann (unter bestimmten Bedingungen) einen Index für die Spalten in ORDER BY verwenden. MySQL kann jedoch keinen Index für gemischt ASC, DESC-Reihenfolge nach (SELECT * FROM foo ORDER BY bar ASC, pants DESC). Wenn Sie Ihre Anfrage und die Anweisung CREATE TABLE teilen, können wir Ihre Frage genauer beantworten.

Hinweise zum Optimieren der ORDER BY-Klauseln: http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html

Bearbeiten 21.01.2012 08:53

Es gab Fragen zur Quelle meiner Aussage zur Verwendung eines Index mit gemischtem ASC/DESC im ORDER BY. Aus der Dokumentation ORDER BY Optimization :

In einigen Fällen kann MySQL keine Indizes verwenden, um ORDER BY aufzulösen, obwohl es weiterhin Indizes verwendet, um die Zeilen zu finden, die mit der WHERE-Klausel übereinstimmen. Diese Fälle umfassen Folgendes:

...

Sie mischen ASC und DESC:

SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;

...

Außerdem lautet das DESC-Schlüsselwort bedeutungslos in CREATE INDEX

Eine index_col_name-Spezifikation kann mit ASC oder DESC enden. Diese Schlüsselwörter sind für zukünftige Erweiterungen zur Angabe des Speichers für aufsteigende oder absteigende Indexwerte zulässig. Derzeit werden sie analysiert, aber ignoriert. Indexwerte werden immer in aufsteigender Reihenfolge gespeichert.

29
Aaron Brown

Für alle, die sich über die Antwort in Bezug auf PostgreSQL wundern, lautet die Antwort: Ja, es wird ein Index verwendet. Gemäß PostgreSQL-Dokumentation wird der Abfrageplaner "in Betracht ziehen, eine ORDER BY-Spezifikation zu erfüllen, indem er entweder einen verfügbaren Index scannt, der der Spezifikation entspricht, oder indem er die Tabelle in physischer Reihenfolge scannt und eine explizite Sortierung durchführt." Dies bedeutet, dass ein Index, den der Planer verwenden kann, dies tut und nach dem Abrufen der übereinstimmenden Zeilen auf eine Sortierung zurückgreift.

6
douglasr