我想优化此查询。我已经提供了使用表格的统计数据。
产品和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
答案 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