Ich habe der Tabelle Indizes hinzugefügt, die für das Suchergebnis verwendet werden. Ich zeige Ergebnisse nach ASC- oder DESC-Reihenfolge. Diese Spalte sollte also einen Index haben oder nicht? Ich habe 2 weitere Indizes auf dieser Tabelle. Wie wirkt sich die Leistung aus, wenn für diese Spalte ein Index erstellt oder nicht erstellt wird?
mysql
performance
index
order-by
Somnath Muluk
quelle
quelle
Antworten:
Ja, MySQL kann (unter bestimmten Bedingungen) einen Index für die Spalten in ORDER BY verwenden. MySQL kann jedoch keinen Index für gemischte ASC- und DESC-Reihenfolge von (
SELECT * FROM foo ORDER BY bar ASC, pants DESC
) verwenden. Wenn Sie Ihre Abfrage und die Anweisung CREATE TABLE freigeben, können wir Ihre Frage genauer beantworten.Hinweise zur Optimierung von ORDER BY-Klauseln finden Sie unter http://dev.mysql.com/doc/refman/5.1/en/order-by-optimization.html
Bearbeiten 2012-01-21 08:53
Es gab Fragen zur Quelle meiner Aussage über die Verwendung eines Index mit gemischtem ASC / DESC im ORDER BY. Aus der Dokumentation zur ORDER BY-Optimierung :
Außerdem ist das DESC-Schlüsselwort in CREATE INDEX bedeutungslos
quelle
CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);
sollte arbeiten.ASC
undDESC
wenn dasINDEX
die gleichen Mischung.Für alle, die sich über die Antwort im Zusammenhang mit PostgreSQL wundern, lautet die Antwort: Ja, es wird ein Index verwendet. Gemäß der PostgreSQL-Dokumentation wird der Abfrageplaner "in Betracht ziehen, eine ORDER BY-Spezifikation zu erfüllen, indem er entweder einen verfügbaren Index durchsucht, der der Spezifikation entspricht, oder indem er die Tabelle in physischer Reihenfolge durchsucht und eine explizite Sortierung vornimmt". Dies bedeutet, dass der Planer einen Index verwenden kann, der nach dem Abrufen der übereinstimmenden Zeilen wieder eine Sortierung vornimmt.
quelle