Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połączenie SELECT DISTINCT z UNION DISTINCT w MySQL - jakiś efekt?

Musisz sprawdzić plany wykonania. Spodziewam się jednak, że plany wykonania są różne – a przynajmniej powinny być w niektórych okolicznościach.

Pierwsze zapytanie:

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

może łatwo korzystać z indeksów w table1(a, b, c) i table2(a, b, c) przed robienie ostatniego UNION . Powinno to przyspieszyć ostateczną unię poprzez zmniejszenie rozmiaru danych. Drugie zapytanie nie ma tej przewagi.

W rzeczywistości najbardziej wydajnym sposobem napisania tego zapytania byłoby prawdopodobnie posiadanie dwóch indeksów i użycie:

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 jest prawie identyczne, chociaż może obsługiwać NULL wartości w drugiej tabeli nieco inaczej.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zrobić zbiorcze wstawianie w mySQL za pomocą node.js?

  2. Narzędzie importu Excel CSV

  3. Przesyłanie obrazów za pomocą tablic i błędów pobierania

  4. jak wyróżnić wyniki wyszukiwania

  5. Wstawić wiele plików tekstowych rozdzielanych tabulatorami do MySQL za pomocą Pythona?