0

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

myMethod()

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

int res = myMethod()

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

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

谢谢你。

4

1 回答 1

1

以我的经验来说

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