临时表存储性能比较

时间:2011-08-15 23:23:58

标签: sql-server common-table-expression temp-tables

任何人都可以用简单的英语将其分解为使用临时表与MSSQL中的CTE与表变量之间的性能差异。我经常使用临时表,并且因为语法清晰而开始使用CTE,但我发现它们更慢。我认为临时表正在使用系统内存,这就是为什么它们看起来很快但如果尝试做多个工作可能会成为瓶颈。表变量我已经谨慎使用,并且不太了解。寻找古茹的一些建议!

3 个答案:

答案 0 :(得分:0)

CTE是性能中立的。它们通过抽象出SQL语句简化了对开发人员的查询 - 通常是复杂的JOIN或应用于字段的内置函数。数据库引擎只是将CTE内嵌到使用它的查询中。因此,CTE本身并不“慢”,但您可能会发现使用临时表具有更好的性能,因为数据库引擎正在使用临时表为查询创建更好的查询计划。

答案 1 :(得分:0)

herehere已回答了这个问题。 简而言之,这是针对不同任务的不同工具。

  • 表变量可以导致比临时表更少的存储过程重新编译
  • 临时表适合重复使用或对一组数据执行多次处理传递

答案 2 :(得分:0)

这个问题在联机丛书,MSDN和本网站中有详细介绍。

关于临时表和表变量,您可以在此处阅读What's the difference between a temp table and table variable in SQL Server?。 在那里你会发现,在许多情况下,临时表会导致重新编译一个程序,这是它们的主要缺点。

CTE在这里有很好的描述http://blogs.msdn.com/b/craigfr/archive/2007/10/18/ctes-common-table-expressions.aspx