Heim > Datenbank > MySQL-Tutorial > Wie kann ich MySQL-Abfragen optimieren, indem ich SELECT-Anweisungen basierend auf der Zeilenanzahl kombiniere?

Wie kann ich MySQL-Abfragen optimieren, indem ich SELECT-Anweisungen basierend auf der Zeilenanzahl kombiniere?

Patricia Arquette
Freigeben: 2024-12-22 21:27:13
Original
834 Leute haben es durchsucht

How Can I Optimize MySQL Queries by Combining SELECT Statements Based on Row Counts?

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')
Nach dem Login kopieren

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
Nach dem Login kopieren

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'
)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage