sql >> データベース >  >> RDS >> Mysql

mysql NOTINQUERY最適化

    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)
    

    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
    

    説明

    最適なクエリは、2つのテーブル間で比較される列がNULL可能かどうかによって判断できます(つまり、specific_product_idの値が どちらのテーブルでもNULLにすることができます 。

    補遺

    最適なクエリが決定したら、作成を確認してください。インデックス(おそらくインデックスをカバーする) 少なくとも:

    • specific_product_id
    • TABLE_PRODUCT.astatus


    1. whereおよびgroupby句を使用したMysqlクエリ

    2. カタログ、スキーマ、ユーザー、およびデータベースインスタンス間の関係

    3. bashスクリプトでmysqlデータベースとユーザーを作成します

    4. 不良RACノードを再作成する