2011-07-05 42 views
5

这个问题说明了一切。哪一个更快?什么时候我们应该使用视图而不是子查询,反之则用于速度优化?哪一个更快速的查看或子查询?

我没有特定的情况,但在使用mysql中的视图尝试一些东西时正在考虑这个问题。

回答

5

在MySQL中都不是特别有效。无论如何,MySQL不会在视图中缓存数据,因此视图只是在查询执行中增加了另一个步骤。这使得视图比子查询慢。看看这个博客文章的一些额外的信息http://www.mysqlperformanceblog.com/2007/08/12/mysql-view-as-performance-troublemaker/

一个可能的选择(如果你可以处理稍有过时的数据)是物化视图。查看Flexviews了解更多信息和实施。

+0

非常好的文章,特别是Blakkky评论下面。 –

5

聪明的优化器会以任何方式提出相同的执行计划。但如果有差异,那是因为优化器出于某种原因无法正确预测视图的行为方式,这意味着在某些情况下,子查询可能具有优势。

但是那不是重点;这是正确性问题。视图和subquerys服务于不同的目的。您使用视图来提供代码重用或安全性。在不了解安全和维护影响的情况下应该使用视图时,接触子查询是愚蠢的。 正确性胜过性能。

+0

我明白了。所以基本上速度明智,他们是一样的? –

+0

@Yasen更新了我的答案 –

+0

谢谢Joel。我知道视图和子查询的不同目的,但我想知道如果使用其中一个,速度会有所增加。 –