Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Verknüpfung vs. Unterabfrage

Unterabfragen sind der logisch korrekte Weg, um Probleme der Form "Erhalte Fakten von A, bedingt durch Fakten von B" zu lösen. In solchen Fällen ist es logischer, B in eine Unterabfrage einzufügen, als einen Join durchzuführen. Es ist auch in praktischer Hinsicht sicherer, da Sie nicht vorsichtig sein müssen, doppelte Fakten von A aufgrund mehrerer Übereinstimmungen gegen B zu erhalten.

In der Praxis hängt die Antwort jedoch normalerweise von der Leistung ab. Einige Optimierer lutschen Zitronen, wenn sie einen Join gegen eine Unterabfrage erhalten, und einige lutschen Zitronen in die andere Richtung, und dies ist optimiererspezifisch, DBMS-versionsspezifisch und abfragespezifisch.

In der Vergangenheit gewinnen explizite Verknüpfungen normalerweise, daher die etablierte Weisheit, dass Verknüpfungen besser sind, aber Optimierer werden ständig besser, und daher ziehe ich es vor, Abfragen zuerst auf logisch kohärente Weise zu schreiben und dann neu zu strukturieren, wenn Leistungseinschränkungen dies rechtfertigen.