Mysql
 sql >> Database >  >> RDS >> Mysql

mysql NOT IN QUERY ottimizza

Utilizzo di 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)

Utilizzo di 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

Spiegazione

La query più ottimale può essere determinata se le colonne confrontate tra le due tabelle sono NULL (IE:se i valori di specific_product_id in entrambe le tabelle può essere NULL ).

Addendum

Una volta determinata la query ottimale, dai un'occhiata a creazione indici (possibilmente a copertura degli indici) almeno per:

  • specific_product_id
  • TABLE_PRODUCT.astatus