sql >> Database >  >> RDS >> Mysql

mysql NIET IN QUERY optimaliseren

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

Gebruik 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

Uitleg

De meest optimale query kan worden bepaald door of de kolommen die tussen de twee tabellen worden vergeleken NULL-able zijn (IE:als de waarden van specific_product_id in beide tabellen kan NULL . zijn ).

Aanvulling

Zodra de optimale zoekopdracht is bepaald, bekijkt u creating indexen (mogelijk indexen dekkend) voor ten minste:

  • specific_product_id
  • TABLE_PRODUCT.astatus


  1. Hoe geef je meerdere CheckBox-waarden door AJAX en verwerk je ze?|

  2. Hoe SQLite Random() werkt

  3. Hoe een niet-null-beperking in Oracle te maken

  4. Hoe mysql-database exclusief te vergrendelen?