0

このクエリを最適化したい。テーブルを使用するための統計を提供しました。

productsおよびproducts_categoriesテーブルには、約5ラックのレコードがあります。しかし、以下のカテゴリーでは、1600のレコードがあります。この1600レコード用のスロットを作成しました。すべての製品には、最小1スロットと最大10スロットを設定できます。しかし、スロットテーブルには約3ラックの記録があります。スロットテーブルには、すでに期限切れのスロットがある場合もあります。間もなく期限切れになる商品が先に来て、残りの商品がこの商品の後ろに来るようにしたいと思います。

end_time列のインデックスを作成しました。ただし、条件演算子を使用したため、このクエリではインデックスを使用していません。このクエリを最適化したい。親切に最善の方法を教えてください。

EXPLAIN 
    SELECT products.*, IF(slot.end_time > NOW(), 1, 2) as order_by_end_time 
    FROM products 
        INNER JOIN products_categories ON products_categories.productid = products.productid 
        LEFT JOIN (select product_id, end_time from slot where end_time>now() order by end_time) as slot ON slot.product_id = products.productid
    WHERE products_categories.categoryid='4410' 
        AND products.saleid = 2 
    GROUP BY products.productid 
    ORDER BY order_by_end_time ASC ,  slot.end_time ASC
4

1 に答える 1

0

id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY xcart_products_categories ref PRIMARY,cpm,productid,orderby,pm cpm 4 const 1523 インデックスの使用; 一時的な使用; filesort の使用 1 PRIMARY xcart_products eq_ref PRIMARY,saleid PRIMARY 4 wwwbvira_xcart.xcart_products_categories.productid 1
where の使用

于 2013-01-29T12:45:12.473 に答える