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

Rows_sent:12 Rows_examined:549024-mySQLクエリを最適化する方法は?

    まず、クエリに問題があります。 LEFT JOINを使用しますが、where句を使用して暗黙のINNER JOINに変換します:AND(a.list_in ='store' OR u.shop_active ='1')

    なぜこれがLEFTJOINを暗黙のINNERに変えるのですか?一致するユーザーがない場合、LEFT JOINはu.shop_activeに対してNULL値を生成しますが、NULLが「1」と等しくなることはありません。これにより、クエリがINNER JOINに変わります。これは、OUTERJOINによって生成されたすべての行がWHERE条件によってフィルタリングされるためです。

    このフィルターは、パフォーマンスの問題の原因でもあります。 2つの異なるテーブルの列間にOR条件があります。このような条件を満たすインデックスはありません。

    これは、パフォーマンスを向上させる可能性のある別の方法です。このバージョンでは、list_in ='store'のリストが12未満の場合にのみ、(a.list_in!='store'およびu.shop_active='1')のリストが検索されます。

    以下を使用するには、(list_in、end_time)にインデックスがあることを確認してください

    SELECT * FROM
    (
        SELECT a.listing_id, a.name, a.item_price, a.max, a.nb, a.currency,
               a.end_time, a.closed, a.bold, a.hl, a.buy_price, a.is_offer, a.reserve,
               a.owner_id, a.postage_amount, a.fb_current_bid, a.type, a.start_time,
               a.is_relisted_item, a.enable
         FROM db_listings a
        WHERE list_in = 'store'
         a.active=1 AND
         a.approved=1 AND 
         a.deleted=0 AND 
         a.creation_in_progress=0 AND
         a.closed=0
        ORDER BY end_time 
        LIMIT 12 
        )
        UNION ALL
        (
            SELECT a.listing_id, a.name, a.item_price, a.max, a.nb, a.currency,
               a.end_time, a.closed, a.bold, a.hl, a.buy_price, a.is_offer, a.reserve,
               a.owner_id, a.postage_amount, a.fb_current_bid, a.type, a.start_time,
               a.is_relisted_item, a.enable
            FROM db_listings a
            JOIN users u 
              ON a.owner_id = u.user_id
             AND u.shop_active = '1'
           WHERE list_in != 'store' AND
           a.active=1 AND
           a.approved=1 AND 
           a.deleted=0 AND 
           a.creation_in_progress=0 AND
           a.closed=0
           ORDER BY end_time 
           LIMIT 12 
        )
    ) sq
    ORDER BY list_in, end_time
    LIMIT 12;
    



    1. デフォルトで例外をスローするようにPDOを設定します

    2. MySqlロードデータインファイルSTR_TO_DATEは空白を返しますか?

    3. general_logテーブルを削除しましたが、どうすれば再作成できますか?

    4. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:mysql内