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

Indexing slow MySQL query with LEFT JOINS and 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

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

感谢提前。

仅在主键上建立索引并不适合您。您应该根据要提取的标准构建有帮助的索引。为您的订单、活动覆盖索引,因此它不必返回到原始数据页面,而是直接从索引中获取结果。

table      index
customer   ( active, area, customerSubGroup, customerID )
orders     ( customerID, created )
activities ( customerID, starting )