我有一个很久以前开发的大型 MySQL 查询。它远非完美,现在是优化它的时候了。我什至不知道从哪里开始,也许为所涉及的表添加索引?或者将查询分解为子查询,将它们存储为视图,然后使用这些视图重新组合结果?请告诉我你将如何处理这样的任务。
查询链接:http: //pastebin.com/sVvW8PCc
使用的 MySQL 版本:5.0.96
它目前在 6.5 秒内加载,我希望将这个时间减少到 2 秒或更短。
先感谢您!
我有一个很久以前开发的大型 MySQL 查询。它远非完美,现在是优化它的时候了。我什至不知道从哪里开始,也许为所涉及的表添加索引?或者将查询分解为子查询,将它们存储为视图,然后使用这些视图重新组合结果?请告诉我你将如何处理这样的任务。
查询链接:http: //pastebin.com/sVvW8PCc
使用的 MySQL 版本:5.0.96
它目前在 6.5 秒内加载,我希望将这个时间减少到 2 秒或更短。
先感谢您!
如果您没有索引,请先执行此操作。
看起来您在每个 UNION 中使用相同的查询,只是更改了通配符(换句话说,连接都是相同的,只有通配符不同。)如果是这样,只关注 UNION 的一部分(例如, WIND)并确保它尽可能高效地运行。然后,您可以将更改复制到其他人。
我怀疑(如果前面的陈述是真的)您可以通过在子句中使用CASE
语句将 UNION 查询组合成一个。SELECT
(您还需要使用 GROUP BY)
您经常确定 MAX(d_updated)。我不确定 MySQL 是否缓存了结果或每次都尝试确定它。为什么不在执行此查询之前确定该值一次,然后将其作为硬编码值发送回您的查询?
最后,我建议使用视图,不是为了性能,而是为了可读性。