sql >> Databáze >  >> RDS >> Mysql

Kombinace SELECT DISTINCT s UNION DISTINCT v MySQL – nějaký efekt?

Musíte zkontrolovat prováděcí plány. Očekával bych však, že prováděcí plány jsou odlišné – nebo by alespoň za určitých okolností měly být.

První dotaz:

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

může snadno využít výhod indexů na table1(a, b, c) a table2(a, b, c) před uděláte poslední UNION . To by mělo urychlit konečné sjednocení snížením velikosti dat. Druhý dotaz tuto výhodu nemá.

Ve skutečnosti by nejúčinnějším způsobem, jak napsat tento dotaz, pravděpodobně bylo mít dva indexy a použít:

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)

To je téměř identické, i když může zpracovat NULL hodnoty ve druhé tabulce trochu jinak.




  1. Název sloupce nebo počet zadaných hodnot neodpovídá definici tabulky

  2. (Python) instalace psycopg2

  3. Jak používat klienta Oracle 11.2 s php (xampp) na win7 x64

  4. Funkce JPA lower() na parametru