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