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

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 SpoolLazy Spool

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

虽然SQL Server 可以通过在视图上创建聚集索引来具体化视图,但并非所有视图都可以被索引(要可索引,视图必须满足here 描述的某些条件)。

【讨论】:

【参考方案2】:

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

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

【讨论】:

有临时表。在表名前使用双井号 (##) 而不是一个。【参考方案3】:

索引视图可能比将数据插入临时表更适合您。此外,与其使用一系列视图,不如将它们合并到一个视图中。它更容易管理,并且很可能会提高性能。此外,源表上的正确索引也会提高性能。

【讨论】:

以上是关于使用视图和临时表之间有啥区别(系统资源方面)?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 和 Linux 有啥区别

oracle 在存储过程中动态的建一个临时表使用和在数据库里写死一个临时表使用两者有啥区别?

Oracle中的临时表与全局临时表有啥区别?

实际使用中,win7和vista有啥区别?

oa系统和ERP系统有啥区别和联系?

SQL Server 安装完成后。有哪几种系统数据库,有啥作用?