Wenn die Indizes richtig verwendet werden, ist es fast immer effizienter einen JOIN verwenden. Die Betonung wurde hinzugefügt, weil beste Effizienz nicht immer gleich beste Leistung ist.
Es gibt jedoch keine allgemeingültige Antwort; Sie sollten eine Abfrage mit EXPLAIN
analysieren um sicherzustellen, dass die Indizes tatsächlich verwendet werden, dass keine unnötigen temporären Tabellen verwendet werden usw. In einigen Fällen , Bedingungen verschwören sich, um eine Abfrage zu erstellen, die einfach nicht kann Indizes verwenden. In diesen Fällen vielleicht schneller sein, um die Abfragen in der von Ihnen angegebenen Weise in Teile aufzuteilen.
Wenn ich in einem bestehenden Projekt auf solchen Code stoße, würde ich ihn hinterfragen:Überprüfen Sie die Abfrage, überlegen Sie sich verschiedene Möglichkeiten, die Abfrage durchzuführen, stellen Sie sicher, dass diese Dinge berücksichtigt wurden, bauen Sie ein wissenschaftliches, faktengestütztes Argument für oder gegen die Praxis auf . Stellen Sie sicher, dass die ursprünglichen Entwickler ihre Sorgfaltspflicht erfüllt haben, da die Nichtverwendung eines JOIN oberflächlich auf ein schlechtes Datenbank- oder Abfragedesign hinweist. Am Ende sprechen die Ergebnisse jedoch eine deutliche Sprache und wenn alle Optimierungen und Korrekturen immer noch zu einem langsameren Join führen als die Verwendung von Abfragefragmenten, dann setzt sich die schnellere Lösung durch. Benchmarking und Handeln auf der Grundlage der Ergebnisse des Benchmarkings; Beim Softwaredesign gibt es keinen Fall, in dem Sie schlechte Leistung gegen die Einhaltung willkürlicher Regeln darüber eintauschen sollten, was Sie tun oder nicht tun sollten. Die beste Methode ist die beste Methode.