sql >> Database >  >> RDS >> Mysql

SELECT DISTINCT combineren met UNION DISTINCT in MySQL - enig effect?

U moet de uitvoeringsplannen controleren. Ik zou echter verwachten dat de uitvoeringsplannen anders zijn -- of in ieder geval zouden ze dat in sommige omstandigheden moeten zijn.

De eerste vraag:

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

kan gemakkelijk profiteren van indexen op table1(a, b, c) en table2(a, b, c) voor de laatste UNION doen . Dit zou de uiteindelijke unie moeten versnellen door de omvang van de gegevens te verkleinen. De tweede zoekopdracht heeft dit voordeel niet.

In feite zou de meest efficiënte manier om deze query te schrijven waarschijnlijk zijn om de twee indexen te hebben en het volgende te gebruiken:

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)

Dit is bijna identiek, hoewel het NULL kan verwerken waarden in de tweede tabel iets anders.




  1. Hoe voorkom je kolomnaamconflicten?

  2. Null individuele waarden retourneren met postgres tablefunc crosstab()

  3. PostgreSQL-installatieprogramma toevoegen aan mijn eigen applicatie-installatieprogramma

  4. Hoe de BETWEEN-voorwaarde te gebruiken met behulp van hoofdquery's en subquery's