Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql NICHT IN FRAGE optimieren

Mit NOT EXISTS

SELECT p.* 
  FROM TABLE_PRODUCT p
 WHERE p.astatus = 'APAST' 
   AND NOT EXISTS (SELECT NULL
                     FROM TABLE_USER_OWNED_AUCTION uoa
                    WHERE uoa.specific_product_id = p.specific_product_id)

Mit LEFT JOIN/IS NULL

   SELECT p.* 
     FROM TABLE_PRODUCT p
LEFT JOIN TABLE_USER_OWNED_AUCTION uoa ON uoa.specific_product_id = p.specific_product_id
    WHERE p.astatus = 'APAST' 
      AND uoa.own_id IS NULL

Erklärung

Die optimalste Abfrage kann dadurch bestimmt werden, ob die zwischen den beiden Tabellen verglichenen Spalten NULL-fähig sind (d. h. wenn die Werte von specific_product_id in jeder Tabelle kann NULL sein ).

Nachtrag

Sobald die optimale Abfrage bestimmt wurde, werfen Sie einen Blick auf create Indizes (möglicherweise überdeckende Indizes) für mindestens:

  • specific_product_id
  • TABLE_PRODUCT.astatus