SQL Server 2000临时表vs表变量

时间:2009-04-21 19:33:39

标签: sql-server variables sql-server-2000

在存储一些临时数据(一个50k行,另一个50k)中执行计算会更有效。我每晚都会做一次这个过程。

比较这样的事情时,如何检查效率?

2 个答案:

答案 0 :(得分:6)

结果将更容易在磁盘(#temp)或内存(@temp)中存储数据。

以下参考文献的一些摘录

  • 在系统数据库tempdb中的磁盘上创建并填充临时表。
  • 表变量在内存中创建,因此比#temp表稍微好一点(因为表变量的锁定和记录更少)。表变量可能仍然对tempdb执行I / O(这是#temp表的性能问题使其显而易见的地方),尽管文档对此并不十分明确。
  • 与临时表相比,表变量导致存储过程的重新编译更少。
  • [Y]您可以在临时表上创建索引以提高查询性能。

关于50k行的特定情况:

  

随着您的数据量变大,和/或临时数据的重复使用增加,您会发现使用#temp表更有意义

参考文献:

答案 1 :(得分:3)

使用表变量和临时表之间可能存在很大的性能差异。在大多数情况下,临时表比表变量更快。我从私有SQL Server MVP新闻组获取以下提示,并获得Microsoft的许可与您共享。一位MVP注意到虽然使用表变量的查询没有在大型SMP盒子上生成并行查询计划,但使用临时表(本地或全局)并在相同环境下运行的类似查询确实生成了并行计划。

来自SQL Mag的更多内容(遗憾的是,我会尝试订阅更多资源)

编辑:以下是来自CodeProject的更深入信息