我的 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
我有大量事件和订单数据。我需要一些帮助来索引这些表(认为这是最大的问题)。现在我在查询中提到的所有列中都有主键...
感谢您的提前。
最佳答案
仅在主键上建立索引并不适合您。您应该构建有助于根据您正在提取的条件提供帮助的索引。覆盖订单、事件的索引,因此不必返回原始数据页面,而是直接从索引获取结果。
table index
customer ( active, area, customerSubGroup, customerID )
orders ( customerID, created )
activities ( customerID, starting )
关于mysql - 使用 LEFT JOINS 和 CASE 对慢速 MySQL 查询建立索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37964455/