sql >> Databasteknik >  >> RDS >> Mysql

Att kombinera SELECT DISTINCT med UNION DISTINCT i MySQL - någon effekt?

Du måste kontrollera genomförandeplanerna. Jag skulle dock förvänta mig att genomförandeplanerna är annorlunda – eller åtminstone borde de vara det under vissa omständigheter.

Den första frågan:

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

kan enkelt dra nytta av index på table1(a, b, c) och table2(a, b, c) före gör den sista UNION . Detta bör påskynda den slutliga sammanslutningen genom att minska storleken på data. Den andra frågan har inte denna fördel.

Faktum är att det mest effektiva sättet att skriva den här frågan förmodligen är att ha de två indexen och använda:

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)

Detta är nästan identiskt, även om det kan hantera NULL värdena i den andra tabellen lite annorlunda.




  1. Micronaut data native-image:Det finns ingen böna av typen [io.micronaut.data.operations.PrimaryRepositoryOperations]

  2. MySql Hur man använder DATE_SUB i Between-satsen

  3. Hur använder man RMySQL i Windows?

  4. Sammanfoga tabeller baserat på maxvärdet