PHP-Performance-Frage: MySQL-Subqueries oder Einzelabfragen?

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Chrisber.

    PHP-Performance-Frage: MySQL-Subqueries oder Einzelabfragen?

    Ich grübele gerade nach, was denn wohl schneller ist. Also es geht um PHP-Skripte mit MySQL-Zugriffen.

    Möglichkeit A:
    Ich schicke eine einzige Abfrage mit diversen Unterabfrage (Subqueries) ab und erhalte so meine (z.B.) 5 Werte.

    Möglichkeit B:
    Ich schicke pro Wert eine eigene Abfrage über PHP los.

    Was ist schneller? Es geht natürlich nur um Fälle, wo Unterabfragen bzw. mehrere Abfragen zwingend nötig sind. Das man in einer Abfrage Felder aus verschiedenen Tabellen abfragen kann, ist mir bewusst. ;)
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Ganz klar Variante A. Das Datenbanksystem hat keine Chance, zu optimieren, wenn du selbst einen Teil seiner Arbeit übernimmst, indem du deine Datenanfrage selbst unterteilst. Dafür musst du die Datenbank aber richtig angelegt haben, das heißt insbesondere semantische Bedingungen eingepflegt, gegebenenfalls Indizes erstellt etc. haben. Sonst ist beides elendig langsam.
    Möglichkeit A ist definitiv schneller, da der SQL Server Queries intern cached und so einfach wieder aufgreifen kann.
    Außerdem muss die Pipe zwischen MySQL und PHP nicht so oft belastet werden.
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.
    Sub-Sub-Queries? Ich habe selten SQL-Anfragen gesehen, die man so weit verschachteln musste, ohne dass es eine bessere Lösung gegeben hätte. Wenn du also den Drang verspürst, was zu verbessern, schau' dir die MySQL-Referenz an, ob es Sprachstrukturen gibt, die SQL erkennen lassen, was du tun willst, so dass es noch besser optimieren kann.
    Ich weiß nun nicht wie ausgereift deine SQL Kenntnisse sind, aber zu meinen beginn Zeiten von PHP und SQL hatte ich auch solche verschachtelungen, bis ich den Sinn von LEFT JOIN verstanden habe. Womit man viele Sub-Queries auf einen Hauptquery reduzieren konnte und die weitere Auswertung der Datensätze dann im Script selbst macht, sofern da noch eine selektierung nötig ist.
    Aber ich muss zugeben ist auch nicht immer die Lösung, auch jetzt muss ich zum teil noch max 1 Sub-Query machen, auch der Übersicht zuliebe.
    @Dodo: Das geht ja, wie ich oben bereits schrieb, in meinem Fall eben nicht. Die Subqueries sind definitiv nötig (falls man's nicht über PHP macht).

    Z.B. möchte ich mit einer Abfrage aus verschiedenen Tabellen diverse Felder PLUS aus verschiedenen Tabellen die Anzahl an Datensätzen, die bestimmte Kriterien erfüllen, auslesen. Die Kriterien sind völlig unterschiedlich.
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Sollte gehen. Hab sowas ähnliches früher mal gebraucht, habe den Code aber leider nicht mehr. Vielleicht auf Dodos Antwort warten ;)
    To make foobar2000 a real random music player, I figured out the only way to achieve this is to use Windows Media Player.

    At some point in time, you recognize that knowing more does not necessarily make you more happy.