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

mysql SELECT NOT IN () -- disjunktní sada?

Měli byste použít neexistující:

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)

Použití NOT IN není nejlepší způsob, jak toho dosáhnout, i když zaškrtnete pouze jeden klíč. Důvodem je to, že pokud použijete NOT EXISTS, DBMS bude muset zkontrolovat indexy pouze v případě, že indexy existují pro potřebné sloupce, kde jako u NOT IN bude muset přečíst skutečná data a vytvořit úplnou sadu výsledků, kterou je třeba následně zkontrolovat. .

Použití LEFT JOIN a následná kontrola NULL je také špatný nápad, bude to bolestně pomalé, když jsou tabulky velké, protože dotaz potřebuje provést celé spojení, číst obě tabulky naplno a následně toho hodně zahodit. Pokud také sloupce umožňují hodnoty NULL, bude kontrola NULL hlásit falešně pozitivní výsledky.



  1. Řaďte ​​podle COUNT za hodnotu

  2. Jak mysql objednává řádky se stejnou hodnotou?

  3. Jak vynutit AKTUALIZACI záznamu MySQL, když se nic nemění

  4. Formátování dat ve vizualizacích Power BI Desktop