dedlfix: 2 MySql-Fragen: Performance und Top10

Beitrag lesen

Hi!

Das sagt dir eine Stoppuhr und EXPLAIN. Ich vermute Unterschiede, wenn die Tabelle sehr groß ist und kein Index verwendet werden kann. Dann könnte LIMIT zu einem Abbruch der Suche führen, und Zeit sparen, wenn die Fundstelle recht weit vorn ist.
Ich glaube eher nicht.
LIMIT ist in der Reihenfolge der Ausführung ganz am Ende. Erst muss die DB das komplette Ergebnis ermitteln (das kann ja beispielsweise auch sortiert werden müssen), erst danach wird der per LIMIT gewünschte Ausschnitt gebildet.

Theoretisch kommt LIMIT erst auf die gesamte Ergebnismenge zur Anwendung. Aber es gibt Situationen, in denen durch LIMIT die Ergebnismengenbildung abgekürzt werden kann - MySQL LIMIT Optimization. ORDER BY auf eine indexierte Spalte und LIMIT x ist so einer, denn hier ist die Sortierung durch den Index schon erfolgt. Sortieren müssen ohne Index steht dem zeitigen Abbruch allerdings im Weg. Bei SELECT * FROM table WHERE spalte=... LIMIT 1 hingegen kann nach der ersten Fundstelle abgebrochen werden. Inwieweit eine solche Abfrage auf eine per Definition unsortierte Menge die gewünschten Daten liefert, ist eine andere Frage. Eine Möglichkeit wäre auch, Spalte aus der WHERE-Bedingung (unique) zu indexieren, dann geht aus diesem Index schon hervor, dass es keine weiteren Datensätze mehr gibt, wenn der nächste, abweichende Wert im Index auftaucht.

Wenn es um Performanceverbesserung geht, ist EXPLAIN genau der richtige Helfer, aber LIMIT nach meiner persönlichen Meinung daran nicht beteiligt. Woran sollte die Datenbank denn erkennen, dass LIMIT das eine Mal vorab bekanntgibt "Brich ab, wenn du den einzigen gefunden hast", und das andere Mal "Finde alle, und gib mir dann nur einen"?

Man sollte sich nicht unbedingt darauf verlassen, denke ich, sondern durch andere Maßnahmen wie Index für einen schnellen Zugriff sorgen. Da werden aber unsere Datenbankexperten sicherlich mehr Erfahrung beisteuern können.

Lo!