Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql SELECT NOT IN () -- несвързан набор?

Трябва да използвате не съществува:

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)

Използването на NOT IN не е най-добрият метод за това, дори и да отметнете само един ключ. Причината е, че ако използвате НЕ СЪЩЕСТВУВА, СУБД ще трябва само да проверява индекси дали съществуват индекси за необходимите колони, а що се отнася до NOT IN ще трябва да прочете действителните данни и да създаде пълен набор от резултати, който впоследствие трябва да бъде проверен .

Използването на LEFT JOIN и след това проверка за NULL също е лоша идея, ще бъде болезнено бавно, когато таблиците са големи, тъй като заявката трябва да направи цялото присъединяване, да прочете и двете таблици напълно и впоследствие да изхвърли голяма част от нея. Освен това, ако колоните позволяват стойности NULL, проверката за NULL ще отчете фалшиви положителни резултати.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използването на MySqlConnection (.NET) за SSL свързване с MySql-сървър се проваля от определени клиенти

  2. Проблем с mysql при частично съвпадение

  3. mysql_connect грешка 500

  4. MySQL:множество таблици или една таблица с много колони?

  5. Как да включите mysql в урока за бърз старт на Jboss