Ist es schneller eine komplizierte boolean zu verwenden, um ein ResultSet am MySQL Ende oder am Ende Java zu begrenzen?

StackOverflow https://stackoverflow.com/questions/2706335

Frage

Lets sagen, ich habe eine wirklich große Tabelle mit vielen Daten gefüllt (sagen wir, nicht genug bequem in den Speicher passen), und ich möchte eine Teilmenge der Zeilen analysieren.

Ist es in der Regel schneller zu tun:

SELECT (column1, column2, ... , columnN) FROM table WHERE (some complicated boolean clause);

und dann die ResultSet verwenden, oder ist es schneller zu tun:

SELECT (column1, column2, ... , columnN) FROM table;

und dann iterieren über die ResultSet, die Annahme verschiedene Zeilen basiert auf einer Java-Version Ihres boolean Zustandes?

Ich denke, es kommt darauf, ob die Java-Iterator / boolean Evaluator ist schneller als der MySQL boolean Auswerter.

War es hilfreich?

Lösung

Es ist mit ziemlicher Sicherheit schneller die Bedingung an die Datenbank zu senden.

  • Sie vermeiden viele Zeilen, deren Daten die Sie nicht benötigen zu übertragen.
  • Die Datenbank könnte etwas schneller als ein Table-Scan verwenden. Es kann in der Lage sein, einen Index zu verwenden, die es schneller die interessanten Zeilen erlaubt zu finden, ohne auf jeder Zeile, um die Bedingungen zu überprüfen zu haben.

Andere Tipps

Ich denke, es kommt darauf an, ob die Java Iterator / boolean Evaluator schneller als der MySQL boolean Evaluator.

Nein. Der entscheidende Faktor wird mit ziemlicher Sicherheit die Menge an Daten, die über das Netzwerk transportiert werden muss (und verschiedene Overhead). Die Reduzierung der Ergebnismenge Größe auf dem DB-Server ist das Richtige 99% der Zeit zu tun. Dies ist insbesondere true in komplexen Abfragen, wo es zu kleineren führen könnte verbindet.

Als allgemeine Regel gilt, gewinnt die Datenbank. Das wird mit ziemlicher Sicherheit der Fall für Sie sein. Wenn Sie jedoch sicher sein wollen, das Profil zu. Ich habe in anderen Sprachen in Fälle lief, wo der Aufwand für die Übertragung eines Los von Daten durch die Tatsache kompensiert, dass ein Teil der Verarbeitung getan außerhalb der DB viel schneller als in es sein könnte. Wenn die Boolesche Bedingung Sie die Bewertung sind äußerst komplex in relationalen Bedingungen auszudrücken, könnte man einen Nutzen in sehen es in Java Bewertung, aber es ist extrem unwahrscheinlich.

Die Datenbank wurde entwickelt, um Ihre Aufgabe zu optimieren. Ihre Sprache war es nicht. Und die Datenbank hat wahrscheinlich besser Caching Ressourcen Plattenoperationen zu verhindern, als dies die Workstation mit alles, was sonst es tut.

Dies ist ein wenig wie zu fragen, ob Sie die Daten in Excel herunterladen sollten zunächst mit einem datawad größer als Excel im Speicher halten kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top