JDBC: LIMIT vs setmaxrows(Resultset)
Wählen Sie top-10-Platten, die ich verwenden können, ein:
- Mit setmaxrows im Resultset
- Mit LIMIT und OFFSET in sql-Anweisung
Meine Frage ist: was ist die Vorteile und Nachteile zwischen Ihnen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Vorteil, setmaxrows ist, dass Sie können erstellen Sie Universelle Aussagen, gültig in Postgres, Oracle, Mysql etc
Oracle ist mit rownum-syntax, postgres - limit, msqsql - top
Speedwise wie es scheint, keinen Unterschied.
Für die meisten Fälle, die Sie verwenden möchten die
LIMIT
- Klausel, aber am Ende des Tages beide erreichen, was Sie wollen. Diese Antwort richtet sich an JDBC und PostgreSQL, aber ist für andere Sprachen und-Datenbanken mit einem ähnlichen Modell.Den JDBC-Dokumentation für
- Anweisung.setMaxRows
sagtd.h. Der Datenbank-server kann die Abfrage mehr Zeilen, aber der Kunde wird Sie einfach ignorieren. Der PostgreSQL-JDBC-Treiber-Beschränkungen auf der client-und server-Seite. Für die client-Seite, haben Sie einen Blick auf die Verwendung von
maxRows
inAbstractJdbc2ResultSet
. Für die server-Seite, ein Blick vonmaxRows
inQueryExecutorImpl
.Server-Seite, die PostgreSQL
LIMIT
- Dokumentation sagt:So lange, wie die Abfrage sinnvoll ist, es lädt nur die Daten die es braucht, um zu erfüllen die Abfrage.
org.postgresql.core.v3.QueryExecutorImpl#sendOneQuery
Methode.setFetchSize Gibt den JDBC-Treiber einen Hinweis auf die Anzahl der Zeilen, werden aus der Datenbank abgerufen, wenn mehr Zeilen benötigt werden, für ResultSet-Objekte erzeugt, die diese Anweisung.
setMaxRows Setzt das limit für die maximale Anzahl von Zeilen, die alle ResultSet-Objekt generiert durch dieses Statement-Objekt enthalten kann, auf die angegebene Anzahl.
Ich denke, mit über 2 JDBC-API können Sie versuchen, mithilfe setFetchSize können Sie versuchen, ob es funktioniert für 100K Datensätze. Sonst Holen Sie in Chargen-und form ArrayList und schicken Sie es zu Ihrem Jasper report.
nicht sicher, ob ich richtig bin, aber ich erinnere mich, in der Vergangenheit war ich eingebunden in ein großes Projekt zu ändern, werden alle Abfragen, die erwartet wurden, zurück eine Zeile in der 'TOP 1' oder numrows=1. Grund war, dass die DB würde aufhören zu suchen, für den 'nächsten möglichen matches', wenn dieser 'Tip' verwendet wurde. Und high-volume-Umgebungen, die diese wirklich einen Unterschied gemacht. Die Bemerkung, dass Sie 'ignorieren' die überflüssigen Datensätze in der client oder in der Ergebnismenge ist nicht genug. Sie sollten vermeiden, unnötige liest sich so früh wie möglich. Aber ich habe keine Ahnung, ob die JDBC-Methoden fügen Sie diese db-spezifische Hinweise zu der Abfrage y/n. Vielleicht muss ich testen, aber um zu sehen und verwenden Sie es ... ich bin kein db-Spezialist und können sich vorstellen, ich bin nicht rechts, aber "Speedwise wie es scheint, keinen Unterschied" kann eine falsche Annahme ... E. g. wenn Sie aufgefordert werden, suchen Sie im Feld für die roten Kugeln, und Sie brauchen nur ein, es nicht Wert, weiter zu suchen, für alle, wo für Sie eine ist genug ... Dann ist es wichtig, um anzugeben, 'TOP 1' ...