2016-03-23 10 views
3

IstVerwenden von setMaxResults (1) vor uniqueResult() für die Optimierung des Ruhezustands?

Schreiben

session.createCriteria(Person.class) .add(Restrictions.eq("id", personId)) .setMaxResults(1) .uniqueResult();

besser als

session.createCriteria(Person.class) .add(Restrictions.eq("id", personId)) .uniqueResult();

von einer Optimierung Sicht zu schreiben? Wird die erste Abfrage schneller sein?

+0

Das hängt von der zugrunde liegenden Datenbank ab und kann nicht allgemein beantwortet werden. Verwenden Sie einen jbdc-Logger oder schauen Sie in Ihr SQL-Log und analysieren Sie den Ausführungsplan der resultierenden Abfragen. – Peter

Antwort

7

Manchmal kann das explizite Begrenzen der Ergebnismengenzeilen auf die erwartete Zahl der Datenbank einen Hinweis geben, um einen optimierteren Abfrageausführungsplan zu erstellen.

In den meisten Datenbanken ist jedoch die Abfrage nach Primärschlüssel die optimale Filterbedingung, so dass zusätzliche Bedingungen keinen Vorteil bringen. Tatsächlich wird das zusätzliche sql-Fragment nur die Zeit und die Zeit der Syntaxanalyse erhöhen, die der db-Optimierer benötigt, um die redundanten Filterbedingungen zu verwerfen.

+0

Also, wenn ich nicht durch Primärschlüssel, sondern durch etwas anderes, auf einer Tabelle mit 1m + Zeilen abfragen, würde/könnte es eine erhebliche Zeit sparen? Und wenn es keine Zeiteinsparung gibt, gibt es keinen Nachteil, also könnte es auch so gemacht werden? – darksmurf

+0

@darksmurf Gute Entwickler machen keine Dinge, ohne genau zu wissen, was sie tun. Wenn Sie redundanten Code "nur weil" schreiben, dann vermitteln Sie nicht gerade ein Gefühl von "Ich bin ein kompetenter Programmierer". Ganz zu schweigen davon, dass ** sogar **, wenn es in diesem Fall eine Verbesserung gäbe, eine Mikrooptimierung wäre, die ein weiteres verräterisches Zeichen eines schlechten Entwicklers ist. Sie werden bessere Ergebnisse erzielen, wenn Sie sich auf Dinge konzentrieren, die wirklich wichtig sind. – Kayaman

+2

@darksmurf In diesem Fall hängt alles von der Datenbank, der tatsächlichen Abfrage, den Indizes usw. ab. Optimieren Sie nicht zu früh. Im Allgemeinen kann verwirrender Code viel mehr Schaden anrichten als der Vorteil von unbemerkbaren Leistungssteigerungen. Wenn Sie feststellen, dass das Hinzufügen die Leistung erheblich verbessert, fügen Sie sie hinzu und dokumentieren Sie sie im Kommentar im Code, warum Sie sie hinzugefügt haben. –

Verwandte Themen