使用LEFT JOINS和CASE索引慢MySQL查询

时间:2016-06-22 09:51:12

标签: mysql indexing left-join case

我的MySQL查询速度很慢:

SELECT 
  c.customerId, c.name,
  CASE WHEN o.created > a.starting THEN o.created ELSE a.starting END AS lastact
FROM customer c
LEFT JOIN orders o ON o.customerId = c.customerId
LEFT JOIN activities a ON a.customerId = c.customerId
WHERE c.area IN ('AREA I', 'AREA II', 'AREA III')
  AND c.active = 1
  AND c.customerSubgroup NOT LIKE 'DEL%'
GROUP BY c.customerId
ORDER BY lastact ASC, name ASC
LIMIT 15

我在活动和订单中有很多数据。索引这些表需要一些帮助(认为这是最大的问题)。现在我在查询中提到的所有列中都有主键...

感谢您提前。

1 个答案:

答案 0 :(得分:1)

只有主键的索引不会为你做。您应该根据要提取的条件构建帮助的索引。涵盖订单,活动的索引,因此它不必返回原始数据页面,而是直接从索引中获取结果。

table      index
customer   ( active, area, customerSubGroup, customerID )
orders     ( customerID, created )
activities ( customerID, starting )
相关问题