Frage

Sind Faust es für Entwickler Regeln, wenn anstelle von Unterabfragen zu verwenden beitreten oder sind sie gleich.

War es hilfreich?

Lösung

Abhängig von RDBMS. Sie sollten Ausführungspläne für beide Abfragen vergleichen.

Nach meiner Erfahrung mit Oracle 10 und 11 sind Ausführungspläne immer gleich.

Andere Tipps

Das erste Prinzip ist „State die Abfrage genau“. Das zweite Prinzip ist „geben Sie die Abfrage einfach und offensichtlich“ (das ist, wo Sie in der Regel Entscheidungen treffen). Die dritte ist „die Abfrage angeben, so dass es effizient verarbeiten“.

Wenn sie ein dbms mit einem guten Abfrageprozessor, äquivalentes Abfrage-Design sollte in Abfrageplänen führen soll, die gleich (oder zumindest ebenso effizient) sind.

Meine größte Enttäuschung auf dem Einsatz von MySQL zum ersten Mal war wie bewusst ich den Optimierer zu antizipieren sein musste. Nach langjähriger Erfahrung mit Oracle, SQL Server, Informix und anderen DBMS-Produkten, ich mich sehr selten mit solchen Fragen zu erwarten betreffen. Es ist besser, jetzt mit neueren Versionen von MySQL, aber es ist noch etwas, das ich die Aufmerksamkeit oft auf, mehr zu zahlen, um am Ende als mit den anderen.

Performance-weise, sie haben keinen Unterschied in den meisten modernen DB-Motoren.

Problem mit Subqueries ist, dass man ohne Schlüssel ein Unter resultset mit enden könnte, so verbinden sie teurer wären.

Wenn möglich, versuchen immer auf Anfragen machen JOIN und mit ON-Klausel filtern, statt WHERE (obwohl es das gleiche sein sollte, wie moderne Motoren für diese optimiert werden).

Theoretisch kann jede Unterabfrage auf eine Join-Abfrage geändert werden.

Wie bei vielen Dingen, es hängt davon ab. - Wie komplex ist die Unterabfrage - in einer Abfrage, wie oft die Unterabfrage ausgeführt

Ich versuche Subqueries zu vermeiden, wann immer ich kann. Vor allem, wenn große Ergebnismengen erwarten nie Subqueries verwenden. - Bei der Unterabfrage für jedes Element der Ergebnismenge ausgeführt wird,

kümmern, Alex

Lassen Sie uns die Auswirkungen auf die Leistung jetzt ignorieren (wie wir sollten, wenn wir uns bewusst sind, dass „Vorzeitige Optimierung ist die Wurzel allen Übels ist“).

Wählen Sie, was klarer und leichter schaut zu halten.

In SQL Server eine korrelierte Unterabfrage führt in der Regel schlechter als eine Verknüpfung oder, oft sogar noch besser für die Leistung, ein zu einer abgeleiteten Tabelle verbinden. Ich so gut wie nie eine Unterabfrage für etwas schreiben, das mehrere Male durchgeführt werden müssen. Dies liegt daran, korrelierte Unterabfragen oft im Grunde Ihre Abfrage in einen Cursor drehen und eine Zeile zu einem Zeitpunkt ausgeführt. In Datenbanken ist es in der Regel besserer Dinge in einer Set-basierten Mode zu tun

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