使用 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 )
我有这个 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 )