使用视图和临时表之间有什么区别(系统资源)?

时间:2009-09-10 12:56:06

标签: sql sql-server tsql sql-server-2008 view

使用视图和临时表之间有什么区别(系统资源)?我有一个复杂的报告,将从众多表格中构建。我试图确定是否应该使用一系列视图或临时表(SQL 2008)。有区别吗?

3 个答案:

答案 0 :(得分:4)

视图只是查询的别名。

临时表实现了结果集。

视图,只是别名,不需要时间来填充,但从选择时它们可能性能较差。

临时表需要花费一些时间(和精力)才能填充,但可以更有效。

请注意,SQL Server优化器可以在视图中在运行时创建临时表(您将在查询统计信息中看到并计划为Worktable中的tempdb),对其进行索引并填充它与行,甚至按需添加缺少的行(这些操作称为Eager SpoolLazy Spool

这使得视图倒带效率更高:每次需要结果时,不是重新评估整个视图,而是将结果一次性存储在临时表中(如Eager Spool中所示),或者逐步存储(如Lazy Spool)。

但是,

SQL Server可以通过在视图上创建聚簇索引来实现视图,但并非所有视图都可以编制索引(可转换,视图必须满足here所述的某些条件。)

答案 1 :(得分:0)

View只是一个带有名称的“固定”SELECT语句。如果您有复杂的查询,或者在其他情况下,如果您只想显示表中的部分数据,则使用视图。视图存在于您创建它的数据库中。

临时表与其他表一样,但它存储在tempdb数据库中,并在完成存储过程等后删除(本地表)。只能在您使用它的过程的范围内看到。还有全局临时表,可以在过程外看到。

答案 2 :(得分:0)

有可能索引视图可能比将数据插入临时表更有用。另外,不是使用一系列视图,而是最好合并到一个视图中。它更容易管理,最有可能提高性能。此外,源表上的正确索引也将提高性能。