2017-09-17 3 views
0

Ich wähle eine einzige Spalte von Fremdschlüsseln aus mehreren Tabellen über UNION oder UNION ALL.Leistung von UNION vs UNION ALL

Es wird im Allgemeinen empfohlen, UNION ALL anstelle von UNION für Leistungsprobleme zu verwenden, wenn Duplikate keine Rolle spielen. In meinem aufrufenden PHP-Skript wäre es jedoch effizienter, die Daten ohne Duplikate zu durchlaufen und zu manipulieren.

Also, ich kann eine der folgenden Optionen verwenden:

Option 1:

Verwendung UNION in der Datenbank Duplikate zu beseitigen

Option 2:

Einsatz UNION ALL in der Datenbank und eliminiere die Daten in meinem PHP-Skript mit array_unique() oder anderen ähnlichen Funktionen.

Meine Annahme ist, dass Option 1 wäre die bevorzugte und effizientere Methode in den meisten Fällen, aber ich habe nichts, diese Annahme zu sichern, und nicht sicher, die beste Art, es zu testen, besonders da es wahrscheinlich abhängen würde viel darüber, was die Daten waren.

Ist meine Annahme in den meisten Fällen korrekt? Wenn ja warum? Wenn nicht, warum nicht?

+0

Testen Sie beide Optionen und Sie werden sehen. – Shadow

+0

Die Antwort ist, dass es abhängt. Testen Sie beides, um es herauszufinden. –

+0

@TimBiegeleisen Sie haben dies als ein Duplikat verlinkt, aber es gibt nichts auf dieser Seite, das meine Frage beantwortet. Es wiederholt nur, was ich bereits in meiner Frage gesagt habe. – kojow7

Antwort

1

Der hauptsächlich Aspekt ist, dass UNION Abkürzung für UNION ist DISTINCT und so

der Unterschied in der Leistung zwischen UNION und UNION ALL auf die
verwandt sind braucht ein deutliches Ergebnis zu erhalten und diese für den Datenbank-Engine und der Query Optimizer sind sicherlich effektiver und effizienter als die filtring alogoritm basierend auf PHP-Code in der Anwendung.

Die dictinct Der Betrieb kann darüber hinaus profitieren Sie von den Pre-Optimierungen für die Gruppe von Funktionalität

Nicht nur wird die doppelte Datenfilterung auf geordneten Daten basieren in der Regel während die ausgewählten SQL-Funktionen ohne Bestellung ausdrücklich arbeiten, Daher kann die Notwendigkeit, Daten mit der Anwendung zu filtern, zu weniger effizienten und längeren Abfragen führen.

Im Allgemeinen wird die db Motor ist viel effizienter, dass Code PHP-Funktionen Anwendung, so dass die Option 1

1

Geschwindigkeit her Regel die bessere Wahl ist, ist es relativ unbedeutend ist. Der Aufwand, um alle SELECTs zu tun, ist mehr als die ded-dup zu machen, egal wie man es macht.

Daher empfehle ich sagen UNION DISTINCT, denn das ist ein paar Tastenanschläge für Sie als array_unique(...).

Weitere Überlegungen:

  • UNION ALL würde mehr Material vom Server an den Client schaufeln; dies (in extremer oder entfernter Situation) könnte ein Leistungsfaktor sein.
  • Wenn Sie auch ORDER BY auf der UNION sagen, können Sie auch die DISTINCT tun.
  • GROUP BY (auf der UNION) hat die Wirkung von DISTINCT.
  • Wenn Sie über Millionen von Zeilen sprechen, denken Sie daran, dass PHP Speichergrenzen für Arrays erreichen kann, während MySQL im Wesentlichen unbegrenzt ist.
+0

Können Sie den Unterschied zwischen UNION und UNION DISTINCT erklären? Ich dachte, UNION würde automatisch eine UNTERSCHEIDUNG machen. – kojow7

+0

'UNION' ist _identisch zu' UNION DISTINCT'. Ich empfehle immer, es so zu formulieren, dass Sie (1) darüber nachdenken, was zu tun ist, und (2) Sie dem nächsten Leser des SQL (das Sie in 6 Monaten sein könnten) sagen, dass Sie eine bewusste Entscheidung getroffen haben. –