Gibt es Faustregeln für Entwickler, wann Join anstelle von Unterabfrage verwendet werden soll oder ob sie identisch sind.An Abfrage oder Unterabfrage teilnehmen
Antwort
Hängt von RDBMS ab. Sie sollten die Ausführungspläne für beide Abfragen vergleichen.
Nach meiner Erfahrung mit Oracle 10 und 11 sind Ausführungspläne immer gleich.
Theoretisch kann jede Unterabfrage in eine Join-Abfrage geändert werden.
Leistungsmäßig haben sie keinen Unterschied in den meisten modernen DB-Motoren.
Problem mit Unterabfragen ist, dass Sie möglicherweise eine Unterergebnisgruppe ohne Schlüssel beenden, daher wäre es teurer, sie zu verbinden.
Wenn möglich, versuchen Sie immer, JOIN-Abfragen zu machen und filtern Sie mit ON-Klausel anstelle von WHERE (obwohl es das gleiche sein sollte, da moderne Engines dafür optimiert sind).
Wie bei vielen Dingen, kommt es darauf an. - wie komplex ist die Unterabfrage - in einer Abfrage wie oft wird die Unterabfrage ausgeführt
Ich versuche Unterabfragen zu vermeiden, wann immer ich kann. Insbesondere wenn große Ergebnismengen erwartet werden, verwenden Sie niemals Unterabfragen - falls die Unterabfrage für jedes Element der Ergebnismenge ausgeführt wird.
kümmern, Alex
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, zu einer abgeleiteten Tabelle einen Join. Ich schreibe fast nie eine Unterabfrage für irgendetwas, das mehrfach durchgeführt werden muss. Dies liegt daran, dass korrelierte Unterabfragen Ihre Abfrage im Grunde genommen in einen Cursor verwandeln und Zeile für Zeile ausführen. In Datenbanken ist es normalerweise besser, Dinge satzbasiert zu tun
Lassen Sie uns die Auswirkungen auf die Leistung jetzt ignorieren (wie wir sollten, wenn wir wissen, dass "vorzeitige Optimierung die Wurzel allen Übels ist").
Wählen Sie, was klarer und einfacher zu warten aussieht.
Das erste Prinzip lautet "Geben Sie die Abfrage genau an". Das zweite Prinzip ist "gib die Abfrage einfach und offensichtlich an" (wo du normalerweise Entscheidungen triffst). Die dritte lautet "Geben Sie die Abfrage an, damit sie effizient verarbeitet wird".
Wenn es ein dbms mit einem guten Abfrageprozessor ist, sollten äquivalente Abfrageentwürfe zu Abfrageplänen führen, die gleich (oder mindestens gleich effizient) sind.
Meine größte Frustration bei der ersten Verwendung von MySQL war, wie bewusst ich sein musste, um den Optimierer vorwegzunehmen. Nach langjähriger Erfahrung mit Oracle, SQL Server, Informix und anderen dbms-Produkten habe ich sehr selten erwartet, mich mit solchen Problemen zu beschäftigen. Es ist jetzt besser mit neueren Versionen von MySQL, aber es ist immer noch etwas, auf das ich am Ende öfter achten muss als bei den anderen.
- 1. JavaScript an einem Array teilnehmen
- 2. Linq2Sql: Abfrage - Unterabfrage-Optimierung
- 3. MySQL Unterabfrage verlangsamt "Haupt" Abfrage
- 4. Aggregate Abfrage mit Unterabfrage (SUM)
- 5. cakephep Abfrage mit Unterabfrage-Stil
- 6. Optimierung der MySQL-Abfrage Unterabfrage
- 7. mysql Update-Abfrage mit Unterabfrage
- 8. Spalte Verwenden von übergeordneten Abfrage in Unterabfrage einer Unterabfrage
- 9. tsql: Wie kann ich an dieser Tabelle teilnehmen?
- 10. Open-Source-Java-Projekte, an denen man teilnehmen kann?
- 11. Bei 3 Tabellen in bigquery teilnehmen
- 12. Verengung des Ergebnisses der Abfrage nach Unterabfrage
- 13. Frage zur SQL-Abfrage (Möglicher Beitritt/Unterabfrage?)
- 14. Unterabfrage in SQLite-Abfrage funktioniert nicht
- 15. Beitreten oder Unterabfrage in MS Access
- 16. mysql Unterabfrage mit Feld aus Abfrage auswählen
- 17. SQL-Abfrage MAx Zeile in Unterabfrage
- 18. Django Abfrage mit einer Zählung auf Unterabfrage
- 19. mysql Abfrage mit mehreren Unterabfrage Optimierung
- 20. SQL-Unterabfrage mit UNION ALL-Abfrage
- 21. 2 verschiedene kleine Abfrage vs 1 Abfrage mit Unterabfrage
- 22. Zend_Db Unterabfrage
- 23. sql Unterabfrage
- 24. Wie kann ich zweimal an einer Tabelle teilnehmen und jedes Mal einen Spaltennamen anders referenzieren?
- 25. Benötigen Sie Hilfe beim Erlernen, wie Sie mit jpa an zwei separaten Entitäten teilnehmen können
- 26. Squeel-Unterabfrage
- 27. Zend_Db_Table Unterabfrage
- 28. Transact-SQL - Unterabfrage oder Links-Join?
- 29. SQL verwende ich Unterabfrage oder was?
- 30. Codeigniter Unterabfrage
Gilt das für korrelierte Unterabfragen? Warum qualifizierst du dich mit "theoretisch"? Können Sie Ihre Antwort auf die Frage vervollständigen? – dkretz