【发布时间】:2015-02-24 02:48:31
【问题描述】:
SELECT journey.code
FROM journey
JOIN journey_day ON journey_day.journey = journey.code
JOIN pattern ON pattern.code = journey.pattern
JOIN link ON link.section = pattern.section
WHERE journey_day.day = 5 AND TIME(NOW()) BETWEEN journey.departure AND journey.end
GROUP BY journey.code
上面的查询平均需要 500ms-1s。这是解释的截图:http://i.imgur.com/YqSdrAH.png
我不知道为什么要花这么长时间,我正在尝试优化查询,使其执行
遗憾的是,SQL Fiddle 目前似乎在构建示意图/查看 Fiddles 方面存在技术问题,因此我将尝试描述下面设置的索引:
索引:
- journey.pattern
- journey.departure
- journey.end
- pattern.code
- pattern.section
- link.section
独特:
- journey.code
- journey_day.journey + Journey_day.day
关于为什么会发生这种情况的任何想法?
【问题讨论】:
-
您的查询正在从
journey表中检索一列。where条件和group by仅在该表和journey_day上。其他表是做什么用的? -
@GordonLinoff 在我的生产查询中,我选择的不止于此,但在我测试时它对查询速度没有影响,所以我把它排除在外以保持简单
标签: mysql sql optimization innodb