Ist es besser, eine Union in SQL oder separate Abfragen und dann PHP Array_merge?

8

Ich habe eine SQL-Abfrage mit 4 UNIONS und 4 LEFT JOINS. Es ist so ausgelegt:

%Vor%

Wäre es besser, 4 separate Abfragen auszuführen und die Ergebnisse anschließend mit php zusammenzuführen? Oder sollte ich sie zusammenhalten? Was würde diese schnellste Ausführung ermöglichen?

    
Chris 08.08.2012, 16:00
quelle

4 Antworten

5

Die definitive Antwort ist, jede Methode zu testen, jedoch ist UNION am wahrscheinlichsten schneller, da nur eine Abfrage von MySQL ausgeführt wird, im Gegensatz zu 4 für jeden Teil der Union.

Sie entfernen auch den Overhead des Lesens der Daten in den Speicher in PHP und verketten es. Stattdessen können Sie einfach ein while() oder foreach() oder was auch immer für ein Ergebnis tun.

    
Bojangles 08.08.2012, 16:02
quelle
0

In diesem Fall hängt es von der Anzahl der Datensätze ab, die Sie aus dem Ergebnis erhalten. Da Sie in allen Unionen linken Join verwenden, schlage ich vor, einen anderen Aufruf durchzuführen, um Engpässe in SQL zu vermeiden, und die Ergebnisse in PHP

zusammenzuführen     
sundar 08.08.2012 16:04
quelle
0

Wenn eine Abfrage von einer Programmiersprache ausgeführt wird, treten die folgenden Schritte auf

  1. Es wird eine Verbindung zwischen Anwendung und Datenbank erstellt (oder eine bestehende Verbindung wird aus dem Pool verwendet)
  2. Die Abfrage wird an die Datenbank
  3. gesendet
  4. Die Datenbank sendet das Ergebnis zurück
  5. Verbindung wird zum Pool
  6. freigegeben

Wenn Sie eine Anzahl von N Abfragen ausführen, treten die oben genannten Schritte N-mal auf, was Sie erraten können, wird den Prozess definitiv verlangsamen. Im Idealfall sollten wir die Anzahl der Anfragen so gering wie möglich halten.

Es wird Sinn machen, eine Abfrage in mehrere Teile aufzuteilen, wenn einzelne Abfragen komplex werden und es schwierig wird, sie zu warten, und die Ausführung viel Zeit in Anspruch nimmt. In diesem Fall wird es auch gut sein, die Abfrage selbst zu optimieren.

Wie in Ihrem Fall ist die Abfrage ziemlich einfach, und da jemand darauf hingewiesen hat, dass die union auch helfen wird, doppelte Zeilen zu entfernen, ist der beste Weg für sql query als php code zu gehen. Probieren Sie Optimierungstechniken wie das Erstellen von korrekten Indizes für Tabellen aus.

    
Kamal 08.08.2012 16:20
quelle
0

Die UNION-Klausel kann schneller sein, da distinct Datensätze gleichzeitig zurückgegeben werden (doppelte Datensätze werden nicht zurückgegeben), andernfalls müssen Sie dies in der Anwendung tun. Außerdem kann es in diesem Fall helfen, den Verkehr zu reduzieren.

Aus der Dokumentation:

  

Das Standardverhalten für UNION ist, dass doppelte Zeilen entfernt werden   das Ergebnis. Das optionale DISTINCT-Schlüsselwort hat nur einen anderen Effekt als das   Standard, weil es auch die Entfernung doppelter Zeilen angibt. Mit dem   Optional ALL Schlüsselwort, doppelte Zeilenentfernung tritt nicht auf und der   Ergebnis enthält alle übereinstimmenden Zeilen aus allen SELECT-Anweisungen.

     

Sie können UNION ALL und UNION DISTINCT in derselben Abfrage mischen. Gemischte UNION   Typen werden so behandelt, dass eine DISTINCT-Union eine beliebige ALL-Union überschreibt   zu seiner Linken. Eine DISTINCT-Union kann explizit unter Verwendung von erzeugt werden   UNION DISTINCT oder implizit durch Verwendung von UNION ohne folgende DISTINCT   oder ALL Schlüsselwort.

    
Devart 08.08.2012 16:11
quelle

Tags und Links