gpt4 book ai didi

mysql - 如何基于解释/索引提高查询性能

转载 作者:行者123 更新时间:2023-11-29 23:17:17 24 4
gpt4 key购买 nike

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 目前似乎在构建原理图/查看 Fiddle 方面存在技术问题,因此我将尝试描述下面设置的索引:

索引:

  • 旅程.模式
  • 旅程.出发
  • 旅程结束
  • 模式代码
  • 模式.部分
  • 链接.部分

独特:

  • 旅程代码
  • journey_day.journey +journey_day.day

关于为什么会发生这种情况有什么想法吗?

最佳答案

需要提及的一些项目......您似乎在各个列上有索引,而不是多个字段的复合单个索引,特别是旅程表。我建议如下索引

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

关于mysql - 如何基于解释/索引提高查询性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27663079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com