Hallo Jörg,
Nehmen wir an, ich will eine sortierte Liste einer DB abrufen:
SELECT * FROM tabelle
ORDER BY irgendwas;
wieviel Daten muss das DBMS zurückliefern?
So. Jetzt möchte ich aber nur die ersten X einträge haben.
Kann ich natürlich so machen:SELECT * FROM tabelle
ORDER BY irgendwas LIMIT 0,10;
wieviel Daten muss das DBMS hier zurückliefern?
(oder so ähnlich, genauen Syntax hab ich grad nich im Kopf).
Ich könnte aber auch...
...das Statement von oben nehmen, aber nicht alle ResultSets holen, z.b.:
wann werden die Daten zum Client transferiert?
ResultSet rs = statement.execute();
int cnt = 0;
while ((rs.next()) && (cnt < 10)) {
// Tu irgendwas
cnt++;
}Welche Lösung ist schneller? Ist eine schneller? Oder hängt es vom DBMS ab, wie genau LIMIT implementiert wurde?
Übrigens: Wo begrenzt Du hier das Resultset?
Im Spezialfall: Teste doch. Dazu bieten vernünftige DBMS übrigens Werkzeuge.
Teste mit einer Tabelle mit 10 Millionen Datensätzen. Lass Dir einmal nur die ersten 10 zurückgeben, danach alle und betrachte nur die ersten 10.
Grundsätzlich gilt: Fordere keine Daten an, die Du nicht benötigst. Deswegen ist in sehr vielen Fällen
SELECT * FROM
keine gute Idee.
Freundliche Grüße
Vinzenz