使用视图和临时表之间有啥区别(系统资源方面)?
Posted
技术标签:
【中文标题】使用视图和临时表之间有啥区别(系统资源方面)?【英文标题】:what is the difference (system resource wise) between using views and temporary tables?使用视图和临时表之间有什么区别(系统资源方面)? 【发布时间】:2009-09-10 12:56:05 【问题描述】:使用视图和临时表有什么区别(系统资源方面)?我有一个复杂的报告,它将由许多表构建。我正在尝试确定是否应该使用一系列视图或临时表 (SQL 2008)。有区别吗?
【问题讨论】:
【参考方案1】:视图只是查询的别名。
一个临时表具体化结果集。
视图,只是别名,不需要时间来填充,但被选中时可能性能较差。
临时表需要一些时间(和精力)来填充,但效率更高。
请注意,SQL Server
优化器可以在运行时从视图中创建一个临时表(您将在查询统计信息中看到它,并计划为 tempdb
中的 Worktable
),对其进行索引并使用行填充它,然后甚至按需添加缺失的行(这些操作称为Eager Spool
和Lazy Spool
)
这使得视图倒带更加高效:不是每次需要结果时都重新评估整个视图,而是将结果一次性存储在一个临时表中(如Eager Spool
),或增量存储(如Lazy Spool
)。
虽然SQL Server
可以通过在视图上创建聚集索引来具体化视图,但并非所有视图都可以被索引(要可索引,视图必须满足here 描述的某些条件)。
【讨论】:
【参考方案2】:View 只是一个带有名称的“固定”SELECT 语句。如果您有复杂的查询,或者在其他情况下,如果您只想显示您使用视图的表中的部分数据。视图存在于您创建它的数据库中。
临时表与其他表一样,但它存储在 tempdb 数据库中,并在您完成存储过程等后被删除(本地表)。有只在你使用的过程范围内可以看到。还有全局临时表,在过程之外可以看到。
【讨论】:
有临时表。在表名前使用双井号 (##) 而不是一个。【参考方案3】:索引视图可能比将数据插入临时表更适合您。此外,与其使用一系列视图,不如将它们合并到一个视图中。它更容易管理,并且很可能会提高性能。此外,源表上的正确索引也会提高性能。
【讨论】:
以上是关于使用视图和临时表之间有啥区别(系统资源方面)?的主要内容,如果未能解决你的问题,请参考以下文章