-1

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

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

使用的 MySQL 版本:5.0.96

它目前在 6.5 秒内加载,我希望将这个时间减少到 2 秒或更短。

先感谢您!

4

1 回答 1

0

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

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

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

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

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

于 2013-10-30T16:06:23.863 回答