mysql - 使用 LEFT JOINS 和 CASE 对慢速 MySQL 查询建立索引

标签 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

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

感谢您的提前。

最佳答案

仅在主键上建立索引并不适合您。您应该构建有助于根据您正在提取的条件提供帮助的索引。覆盖订单、事件的索引,因此不必返回原始数据页面,而是直接从索引获取结果。

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/

相关文章:

MySQL根据一个id从多个表中选择数据

mysql - 当有多个 JOINS 时,使用非规范化设计不是更好吗?

python - 如何索引子字典并创建嵌套 for 循环

mysql SUM left join force show results with sum of 0 零结果

php - MySQL:连接表重复 SUM()

mysql - 如何在sql中选择前一个最接近的值

MySQL 错误代码 : 1193. 未知系统变量

c# - 优化 Lucene 批量索引

sql - Postgres pg_trgm GIN 索引在特定连接中被忽略

MySql LEFT JOIN Takes a Long Time - 已添加索引