使用视图和临时表之间有什么区别(系统资源)?我有一个复杂的报告,将从众多表格中构建。我试图确定是否应该使用一系列视图或临时表(SQL 2008)。有区别吗?
答案 0 :(得分:4)
视图只是查询的别名。
临时表实现了结果集。
视图,只是别名,不需要时间来填充,但从选择时它们可能性能较差。
临时表需要花费一些时间(和精力)才能填充,但可以更有效。
请注意,SQL Server
优化器可以在视图中在运行时创建临时表(您将在查询统计信息中看到并计划为Worktable
中的tempdb
),对其进行索引并填充它与行,甚至按需添加缺少的行(这些操作称为Eager Spool
和Lazy Spool
)
这使得视图倒带效率更高:每次需要结果时,不是重新评估整个视图,而是将结果一次性存储在临时表中(如Eager Spool
中所示),或者逐步存储(如Lazy Spool
)。
SQL Server
可以通过在视图上创建聚簇索引来实现视图,但并非所有视图都可以编制索引(可转换,视图必须满足here所述的某些条件。)
答案 1 :(得分:0)
View只是一个带有名称的“固定”SELECT语句。如果您有复杂的查询,或者在其他情况下,如果您只想显示表中的部分数据,则使用视图。视图存在于您创建它的数据库中。
临时表与其他表一样,但它存储在tempdb数据库中,并在完成存储过程等后删除(本地表)。只能在您使用它的过程的范围内看到。还有全局临时表,可以在过程外看到。
答案 2 :(得分:0)
有可能索引视图可能比将数据插入临时表更有用。另外,不是使用一系列视图,而是最好合并到一个视图中。它更容易管理,最有可能提高性能。此外,源表上的正确索引也将提高性能。