Mysql
 sql >> Database >  >> RDS >> Mysql

Combinando SELECT DISTINCT con UNION DISTINCT in MySQL - qualche effetto?

Devi controllare i piani di esecuzione. Tuttavia, mi aspetto che i piani di esecuzione siano diversi, o almeno dovrebbero esserlo in alcune circostanze.

La prima domanda:

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

può facilmente sfruttare gli indici su table1(a, b, c) e table2(a, b, c) prima facendo la UNION finale . Ciò dovrebbe accelerare l'unione finale riducendo le dimensioni dei dati. La seconda query non ha questo vantaggio.

In effetti, il modo più efficiente per scrivere questa query sarebbe probabilmente avere i due indici e utilizzare:

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)

Questo è quasi identico, anche se potrebbe gestire NULL valori nella seconda tabella in modo leggermente diverso.