哪个更快,视图还是子查询?

5

这个问题已经说明了一切。哪个更快?当涉及到速度优化时,何时应该使用视图而不是子查询,反之亦然?

我没有具体的情况,但在尝试mysql中的视图时考虑到了这个问题。

2个回答

6

一个聪明的优化器无论哪种方式都会得出相同的执行计划。但是,如果有差异,那么可能是因为优化器不能正确预测视图的行为,这意味着在某些情况下,子查询可能具有优势。

但这与重点不符;这是一个正确性问题。视图和子查询有不同的用途。您使用视图提供代码重用或安全性。如果没有理解安全性和维护影响,就使用子查询而不是视图是愚蠢的。 正确性优先于性能。


我明白了。所以基本上速度方面它们是一样的? - Yasen Zhelev
谢谢Joel。我知道视图和子查询的不同用途,但我想知道使用其中一个是否会比另一个更快。 - Yasen Zhelev

5
MySQL 中这两种方法都不是特别高效。无论如何,MySQL 在视图中不缓存数据,因此视图只是在查询执行过程中添加了另一步骤。这使得视图比子查询更慢。如果您想了解更多信息,请查看这篇博客文章:http://www.mysqlperformanceblog.com/2007/08/12/mysql-view-as-performance-troublemaker/ 如果您可以处理略有过时的数据,那么一种可能的替代方法是材料化视图。请查看Flexviews以获取更多信息和实现。

有人知道自2007年以来有没有发生变化吗? - undefined
1
@CharlesWood 我链接的博客文章可能已经解决了提到的特定性能问题,但我并没有看到任何理由让视图更快。你最好的办法就是对其进行基准测试,看看在你具体的使用情况下会怎样。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接