ist eigentlich WHERE xyz LIKE 'test' LIMIT 0,50 genau so schnell wie LIMIT 50,100?
-
genauer gesagt in mysql, in beiden fällen werden nur 50 rows geliefert aber woher weiss den die db welches ergebniss das 51 ist? außer sie sucht die ersten 50 ergebnisse oder tricksen sie mit irgend einen cache rum?
-
Folgendes ist soweit ich es verstanden habe - muss also nicht richtig sein:
MySQL verwendet LIMIT größtenteils nur zum früheren abbrechen der Suche.
Sprich bei limit 10 wird sofort beendet, nachdem die ersten 10 Treffer gefunden wurden.
Bei limit 10,20 müssen 20 treffer gefunden werden, damit abgebrochen werden kann.
Weiters kann MySQL dank Limit manchmal Indexes statt einem Full-Table-Scan machen, weil es weiss, dass das Resultset begrenzt ist. In diesem Fall müssen dann natürlich nur 10 Treffer gefunden werden, weil MySQL dank den Indeces ja weiss wo der 10. und wo der 20. Treffer liegt.
Wie man hier mit einem Cache tricksen könnte, wüsste ich nicht. Aber einen Query Cache gibt es ja - nur ist dieser cache 'dumm', weil er nur direkt ein Query cacht und für ähnliche Queries blind ist.
Und dass es extra für Limit einen weiteren cache gibt, wage ich zu bezweifeln.
-
oft ist es doch so wenn man eine große tabelle auf mehrer seiten splitet (z.b. die ausgabe der treffer zu einen suchbegriff)
das wenn man auf seite 1 geht LIMIT 0,20 und auf seite zwei LIMIT 20,20 ausgefühgt wird.
beim ersten query kann sich die db merken welcher datensatz den der zwanzigste ist und bei LIMIT 20,20 erst ab diesem datensatz anfangen zu suchen und nicht erst beim nulltenich fage mich das ganze, weil ich überlege bei der suchfunktion die LIMITs zu ändern
-
MySQL sucht immer wieder aufs neue wenn die Tabelle nicht gerade im Speicher liegt.
Aus der Sucher erstellt es ein Resultset und prüft dieses auf den LIMIT-Wert. Ist er erreicht beendet es die Suche, liefert das Resultset an den Client aus und löscht es oder auch nicht. (Je nachdem ob store_result oder use_result verwendet wird).