Kombinieren von SELECT-Abfragen basierend auf der Zeilenanzahl
In PHP kann die Optimierung von Datenbankabfragen die Skriptleistung verbessern. Eine Technik besteht darin, Logik in MySQL zu pushen, indem eine zweite SELECT-Abfrage bedingt ausgeführt wird, wenn die erste keine Zeilen zurückgibt.
Betrachten Sie das folgende Beispiel:
SELECT * FROM proxies WHERE (A='B') || SELECT * FROM proxies WHERE (A='C')
Dieser Code führt beide SELECT-Abfragen unabhängig von der aus Das Ergebnis der ersten Abfrage.
Ein besserer Ansatz ist die Verwendung der bedingten Ausführungsfunktion von MySQL, wie hier gezeigt Code:
IF (SELECT count(*) FROM proxies WHERE A='B')>0 THEN SELECT * FROM proxies WHERE A='B' ELSEIF (SELECT count(*) FROM proxies WHERE A='C')>0 THEN SELECT * FROM proxies WHERE A='C' END IF
Diese Methode führt die Zählabfragen jedoch immer noch zweimal aus.
Eine effizientere Lösung ist die Verwendung von UNION ALL in Verbindung mit EXISTS:
SELECT * FROM proxies WHERE A='B' UNION ALL SELECT * FROM proxies WHERE A='C' AND NOT EXISTS ( SELECT 1 FROM proxies WHERE A='B' )
Diese Abfrage ruft Zeilen mit A='B' ab, falls vorhanden, und wenn nicht, ruft sie Zeilen mit A='C' ab. Durch die Verwendung der EXISTS-Bedingung ruft die Abfrage nur Zeilen für die erste angegebene Bedingung (A='B') ab, wenn sie vorhanden sind, was zu einer einzigen Ausführung der Zählabfrage führt.
SQL Fiddle Demo: https:/ /www.sqlfiddle.com/#!9/3de314
Das obige ist der detaillierte Inhalt vonWie kann ich MySQL-Abfragen optimieren, indem ich SELECT-Anweisungen basierend auf der Zeilenanzahl kombiniere?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!