Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Combinando SELECT DISTINCT com UNION DISTINCT no MySQL - algum efeito?


Você precisa verificar os planos de execução. No entanto, eu esperaria que os planos de execução fossem diferentes - ou pelo menos deveriam ser em algumas circunstâncias.

A primeira consulta:
SELECT DISTINCT a, b, c FROM table1
UNION DISTINCT
SELECT DISTINCT a, b, c FROM table2

pode aproveitar prontamente os índices em table1(a, b, c) e table2(a, b, c) antes fazendo o UNION final . Isso deve acelerar a união final, reduzindo o tamanho dos dados. A segunda consulta não tem essa vantagem.

Na verdade, a maneira mais eficiente de escrever essa consulta provavelmente seria ter os dois índices e 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)

Isso é quase idêntico, embora possa lidar com NULL valores na segunda tabela um pouco diferente.