SQL Server 中的视图与临时表或临时变量相比如何?

5

我希望了解在SQL Server存储过程中使用视图与临时表的性能优劣。

我知道这两者之间的区别(例如,临时表可能会提供过期数据等),但我找不到任何关于性能方面的信息。


为什么不测试一下呢?没有人能够准确地告诉你在你的情况下的性能表现。构建对象,加载代表性数据,用工具模拟查询模式。大功告成! - Stephanie Page
1个回答

5

Views(视图)在没有企业版的情况下不会提高性能,而且你的视图必须遵循索引视图的规则。调用其他视图的视图可能会导致严重的性能问题。 临时表(Temp tables)可能会有过期数据,但对于在存储过程中有多个操作的事务来说,这通常是一个好事,因为所有操作都针对同一组数据进行。这样可以减少数据完整性问题。 表变量(Table variables)通常在较小的数据集中比临时表(Temp tables)更快,但对于较大的数据集,临时表(Temp tables)往往表现更好,特别是因为它们可以被索引。与所有性能调整一样,根据您的特定硬件和数据库设计的不同,存在差异,因此如果您关心性能(正如您应该),则需要测试各种选项以找到最适合您特定实例的选项。


感谢您的回复,但您能详细说明“除非您拥有企业版并且您的视图遵循索引视图的规则,否则视图不会提供更好的性能”吗? - Abhi9
您可以使用noexpand提示,以便在其他版本中使用索引视图。我在SO上看到一个问题,表明从SQL Server 2008 R2开始不再适用,但我自己不确定。 - Martin Smith
@Abhi9,你需要在Books Online中阅读关于索引视图的内容,因为是否可以对视图进行索引有一系列复杂的规则。 - HLGEM
在SQL 2012 SE中,不需要使用Noexpand提示符,根据文档http://msdn.microsoft.com/en-us/library/cc645993(v=sql.110).aspx,服务器应自动优化以获得更好的性能计划...与2008 R2相比,这一点已经改变。虽然我没有SE来验证。 - Bogdan_Ch

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