MySQL怪物查询优化

时间:2013-10-30 15:34:06

标签: mysql sql performance query-optimization

我有很久以前开发的这个大型MySQL查询。它远非完美,现在是优化它的时候了。我甚至不知道从哪里开始,可能会为所涉及的表添加索引?或者将查询分解为子查询,将它们存储为视图,然后使用这些视图重新组合结果? 请告诉我你将如何处理这样的任务。

查询链接: http://pastebin.com/sVvW8PCc

使用的MySQL版本:5.0.96

它目前加载时间为6.5秒,我希望将此时间减少到2秒或更短。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

如果您没有索引,请先执行此操作。

看起来你在每个UNION中使用相同的查询,只是更改通配符(换句话说,只有通配符不同,连接才一样。)如果是这样,只关注UNION的1部分(例如,WIND)并确保尽可能高效地运行。然后,您可以将更改复制到其他人。

我怀疑(如果前面的陈述是真的)你可以通过在CASE子句中使用SELECT语句将UNION查询合并为一个。 (您还需要使用GROUP BY)

您经常确定MAX(d_updated)。我不确定MySQL是否会缓存结果或者每次都尝试确定它。为什么不在执行此查询之前确定该值一次,然后将其作为硬编码值发送回查询?

最后,我建议使用视图,不是为了提高性能,而是为了提高可读性。