Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kombinieren von SELECT DISTINCT mit UNION DISTINCT in MySQL - irgendein Effekt?

Sie müssen die Ausführungspläne überprüfen. Ich würde jedoch erwarten, dass die Ausführungspläne unterschiedlich sind – oder zumindest sollten sie es unter bestimmten Umständen sein.

Die erste Abfrage:

SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2

kann leicht Indizes auf table1(a, b, c) nutzen und table2(a, b, c) vorher macht die letzte UNION . Dies sollte die endgültige Vereinigung beschleunigen, indem die Größe der Daten reduziert wird. Die zweite Abfrage hat diesen Vorteil nicht.

Tatsächlich wäre der effizienteste Weg, diese Abfrage zu schreiben, wahrscheinlich, die beiden Indizes zu haben und zu verwenden:

SELECT DISTINCT a, b, c FROM table1 t1
UNION ALL
SELECT DISTINCT a, b, c
FROM table2 t2
WHERE NOT EXISTS (SELECT 1 FROM table1 t1 WHERE t2.a = t1.a and t2.b = t1.b and t2.c = t1.c)

Dies ist fast identisch, obwohl es NULL behandeln könnte Werte in der zweiten Tabelle etwas anders.