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
我无法弄清楚为什么要花这么长时间,我正在尝试优化查询,以便执行< = 100ms。
可悲的是,似乎SQL Fiddle目前在构建原理图/查看Fiddles方面存在技术问题,因此我将尝试描述下面设置的索引:
INDEX:
UNIQUE:
有关为何发生这种情况的任何想法?
答案 0 :(得分:0)
一些要提及的项目....您似乎在各个列上有索引而不是多个字段的复合单个索引,特别是对于旅程表。我建议以下索引如下
journey (departure, end, code, pattern )
journey_day ( journey, day )
pattern (code)
link (section)
其次,你只是从旅程表中获取代码,但实际上并没有从模式或链接表中做任何事情,所以我不知道为什么你将它们包含在你的查询中并且可以简化为
SELECT DISTINCT j.code
FROM journey j
JOIN journey_day jd
ON j.code = jd.journey
AND jd.day = 5
WHERE
TIME(NOW()) BETWEEN j.departure AND j.end