Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql NOT IN QUERY otimizar

Usando 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)

Usando 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

Explicação


A consulta mais ideal pode ser determinada se as colunas comparadas entre as duas tabelas forem NULLable (IE:se os valores de specific_product_id em qualquer tabela pode ser NULL ).

Adendo


Depois que a consulta ideal for determinada, dê uma olhada em criando índices (possivelmente cobrindo índices) para pelo menos:
  • specific_product_id
  • TABLE_PRODUCT.astatus