【发布时间】:2011-09-28 22:55:45
【问题描述】:
问题说明了一切。哪个更快?在速度优化方面,我们什么时候应该使用视图而不是子查询,反之亦然?
我没有特定的情况,但是在 mysql 中尝试一些带有视图的东西时正在考虑这个问题。
【问题讨论】:
问题说明了一切。哪个更快?在速度优化方面,我们什么时候应该使用视图而不是子查询,反之亦然?
我没有特定的情况,但是在 mysql 中尝试一些带有视图的东西时正在考虑这个问题。
【问题讨论】:
两者在 MySQL 中都不是特别有效。在任何情况下,MySQL 都不会缓存视图中的数据,因此视图只是在查询执行中添加了另一个步骤。这使得视图比子查询慢。查看这篇博文了解更多信息http://www.mysqlperformanceblog.com/2007/08/12/mysql-view-as-performance-troublemaker/
一种可能的替代方案(如果您可以处理稍微过时的数据)是物化视图。查看Flexviews 了解更多信息和实现。
【讨论】:
无论哪种方式,智能优化器都会提出相同的执行计划。但是如果存在差异,那将是因为优化器由于某种原因无法正确预测视图的行为方式,这意味着子查询在某些情况下可能具有优势。
但这不是重点;这是一个正确性问题。视图和子查询有不同的用途。您使用视图来提供代码重用或安全性。在不了解安全和维护含义的情况下使用视图时却使用子查询是愚蠢的。 正确性胜过性能。
【讨论】: