表表达式和表变量/临时表持久性

时间:2015-05-08 11:55:10

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

据我所知,表表达式不会持久存在,这意味着外部代码中对它的每次引用都是对定义的重复调用。这是表格变量/临时表格在图片中的表格,以保持表格并避免每次重新评估。在我看来,表变量/临时表是避免重复的更好选择。我对编程做了一个反应,而不是调用方法

myMethod()

每一次,我宁愿为它分配一个变量

int res = myMethod()

避免多次调用myMethod()。 myMethod()类似于表表达式,res是表变量/临时表。

那么我们为什么要使用表表达式呢?在哪些场景中我们必须使用表表达式而不是其他两个表达式?反之亦然?

谢谢。

1 个答案:

答案 0 :(得分:1)

根据我的经验说明

  • 想象一下,您将1000万条记录插入临时表并仅使用它一次。这将浪费时间,内存和CPU。要更有效地使用巨大的临时表,还需要在临时表的顶部创建索引。而CTE则使用现有表中的索引。
  • 如果要从标量表达式对列进行分组。例如。将row_number()列分组。
  • 对于复杂查询更具可读性
  • 当然它允许我们编写非常酷的递归查询