sql >> Database >  >> RDS >> Mysql

mysql SELECT NOT IN () -- disjuncte set?

Je zou moeten gebruiken niet bestaat:

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)

Het gebruik van NOT IN is niet de beste methode om dit te doen, zelfs als u slechts één toets aanvinkt. De reden is dat als u NOT EXISTS gebruikt, het DBMS alleen indices hoeft te controleren als er indices bestaan ​​voor de benodigde kolommen, terwijl voor NOT IN de feitelijke gegevens moeten worden gelezen en een volledige resultatenset moet worden gemaakt die vervolgens moet worden gecontroleerd .

Een LEFT JOIN gebruiken en vervolgens controleren op NULL is ook een slecht idee, het zal pijnlijk traag zijn als de tabellen groot zijn, omdat de query de hele join moet maken, beide tabellen volledig moet lezen en er vervolgens veel van moet weggooien. Als de kolommen NULL-waarden toestaan, zal het controleren op NULL ook valse positieven rapporteren.



  1. MariaDB JSON_ARRAYAGG() uitgelegd

  2. c# mysql AddWithValue unicode

  3. Waarschuwing:mysql_fetch_array():opgegeven argument is geen geldig MySQL-resultaat

  4. Woocommerce krijgt product-ID met product-SKU