优化使用条件运算符和mysql中的排序子句的查询

时间:2013-01-28 07:10:38

标签: mysql

我想优化此查询。我已经提供了使用表格的统计数据。

产品和products_categories表有大约5个记录。但对于下面提到的类别,它有1600记录。我为这1600条记录创建了插槽。每个产品最少有1个插槽,最多10个插槽。但是槽表有大约3个记录。槽表也可以到期槽。我想获得即将到期的产品,这些产品的其他产品都会落后于此产品。

我为end_time colume创建了索引。但我使用了条件运算符,因此索引不在此查询中使用。我想优化这个查询。请告诉我最好的方法。

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

1 个答案:

答案 0 :(得分:0)

id select_type表类型possible_keys键key_len ref rows Extra 1主要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使用地点 1 PRIMARY ALL NULL NULL NULL NULL 395802
2 DERIVED bvira_megahour_time_slot ALL i_end_time NULL NULL NULL 398907使用filesort