sql >> Base de Datos >  >> RDS >> Mysql

Combinar SELECT DISTINCT con UNION DISTINCT en MySQL:¿algún efecto?

Es necesario comprobar los planes de ejecución. Sin embargo, esperaría que los planes de ejecución sean diferentes, o al menos deberían serlo en algunas circunstancias.

La primera consulta:

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

puede aprovechar fácilmente los índices en table1(a, b, c) y table2(a, b, c) antes haciendo el UNION final . Esto debería acelerar la unión final al reducir el tamaño de los datos. La segunda consulta no tiene esta ventaja.

De hecho, la forma más eficiente de escribir esta consulta probablemente sería tener los dos índices y usar:

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)

Esto es casi idéntico, aunque podría manejar NULL valores en la segunda tabla un poco diferente.