使用Table变量比临时表更快

时间:2012-01-30 09:58:46

标签: sql-server-2008-r2 table-variable temp-tables

我可以安全地假设我使用tempdb编写临时表的存储过程,我最好将它们切换到表变量以获得更好的性能吗?

3 个答案:

答案 0 :(得分:1)

临时表的性能更好。如果使用表变量并且变量中的数据太大,则SQL Server会自动将变量转换为临时表。

与几乎所有与数据库相关的问题一样,它取决于您尝试做什么。所以没有更多信息就很难回答。

所以我的答案是,尝试一下,看看执行计划。以最快的方式使用最低的成本。

答案 1 :(得分:1)

@Table可以更快,因为设置时间更少"因为对象只在内存中。

@Tables有很多捕获量。

您可以在@Table上拥有主键,但就此而言。其他索引无法使用Clustered NonClustered列的组合。

此外,如果您的表将包含任何实际数据卷(大约200个,可能是1000行),那么访问该表将会更慢。特别是当你可能没有一个有用的索引时。

#Tables是一个痛苦的过程,因为它们需要在调试时被删除,它们需要更长的时间来创建。并且他们需要更长的时间来设置,因为您需要添加索引作为第二步。但是如果你有很多数据,那么每次都是#tables。

即使在表格中少于100行数据的情况下,您仍然可能希望使用#Tables,因为您可以在表格上创建有用的索引。

总之,我在大多数情况下使用@Tables来做简单的proc等等。但是任何需要执行的东西都应该是#Table。

答案 2 :(得分:0)

@Tables没有统计数据,因此执行计划需要更多的猜测。因此建议上限为1000行。 #Tables有统计信息,但调用之间有can be cached个。如果每次SP运行时您的基数差别很大,您每次都希望REBUILDRECOMPILE。当然,这是一个开销,但必须与垃圾计划的成本相平衡。

这两种类型都会IO to TempDB

所以不,@ Tables不是灵丹妙药。