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

mysql SELECT NOT IN () -- zestaw rozłączny?

Powinieneś użyć nie istnieje:

SELECT DISTINCT a, b, c FROM t1 WHERE NOT EXISTS (SELECT NULL FROM t2 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c)

Używanie NOT IN nie jest najlepszą metodą, aby to zrobić, nawet jeśli zaznaczysz tylko jeden klucz. Powodem jest to, że jeśli użyjesz NIE ISTNIEJE, DBMS będzie musiał tylko sprawdzić indeksy, jeśli istnieją indeksy dla potrzebnych kolumn, gdzie w przypadku NOT IN będzie musiał odczytać rzeczywiste dane i utworzyć pełny zestaw wyników, który następnie należy sprawdzić .

Używanie LEFT JOIN, a następnie sprawdzanie NULL jest również złym pomysłem, będzie boleśnie powolne, gdy tabele są duże, ponieważ zapytanie musi wykonać całe sprzężenie, w pełni odczytać obie tabele, a następnie wyrzucić ich dużo. Ponadto, jeśli kolumny pozwalają na wartości NULL, sprawdzenie NULL zgłosi fałszywe alarmy.



  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 znaleźć najpopularniejsze wystąpienia słów w MySQL?

  2. Jak udzielić zdalnego dostępu do MySQL dla całej podsieci?

  3. Jaka jest różnica wydajności w implementacjach podziału relacyjnego MySQL (IN AND zamiast IN OR)?

  4. Wyjątek MySQL — napotkany błąd krytyczny podczas odczytu danych

  5. MYSQL — zapytanie o spłaszczenie tabeli