Rouven: LIMIT oder Begrenzung der ResulSets schneller?

Beitrag lesen

Hallo,

Das ist jetzt eben die Frage. Wenn das Resultset bei einem "statement.execute()" komplett geholt wird, ist natürlich die Lösung mit LIMIT vorzuziehen.
Aber: Dessen bin ich mir eben nicht sicher. Ich denke nämlich, dass
"statement.execute()" das Resultat in der Datenbank komplett vorbereitet, aber nicht komplett zurückliefert.
Die Daten einer Zeile geholt werden (denke ich) erst bei rs.next();

selbst wenn wir mal für einen Moment annehmen, dass das tatsächlich so ist und die Datenbank die Ergebnisse in keiner Weise nach außen trägt. Der SQL-Standard schreibt verschiedene Stability Levels vor um zu garantieren, dass sich dein Cursor auch wie erwartet verhält (hab leider gerade keinen Link da). In den allermeisten Fällen muss die Datenbank also das Ergebnis deiner Abfrage getrennt von den eigentlichen Daten halten um sicherzustellen, dass eine andere parallele Abfrage nicht die Integrität der Daten gefährdet. Um auf Vinzenz Beispiel zurückzukommen, müssten sie also 10Mio Daten NOCHMAL irgendwie ablegen (oder geschickt gegen den Datenbestand abgleichen). Unabhängig von der Prozessorlast dürfte die "alles abfragen"-Variante also eine signifikant höhere Speicherlast zur Folge haben.

MfG
Rouven

--
-------------------
Computer programming is tremendous fun. Like music, it is a skill that derives from an unknown blend of innate talent and constant practice. Like drawing, it can be shaped to a variety of ends: commercial, artistic, and pure entertainment. Programmers have a well-deserved reputation for working long hours but are rarely credited with being driven by creative fevers. Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination, but because their imagination reveals worlds that others cannot see. -- Larry OBrien and Bruce Eckel in Thinking in C#