Table表达和tablevariable/temporarytable坚持

Table expression and table variable/temporary table persistence

据我了解,table 表达式不会持续存在,这意味着在外部代码中对它的每次引用都是对定义的重复调用。这就是 table variable/temp table 出现的地方,以坚持 table 并避免每次都重新评估。在我看来 table variables/temp table 是避免重复的更好选择。我对编程做了一个类比,而不是调用方法

myMethod()

每次,我宁愿给它赋一个变量

int res = myMethod()

避免多次调用 myMethod()。 myMethod() 类似于 table 表达式,res 是 table variable/temp table.

那么我们为什么要使用 table 表达式呢?在什么情况下我们必须使用 table 表达式而不是其他两个?反之亦然?

谢谢。

说说我的经历

  • 假设您将 1000 万条记录插入 temp table 并且只使用一次。这纯粹是浪费时间、内存和 cpu。要更有效地使用巨大的临时 table,您还需要在临时 table 之上创建索引。同时,CTE 使用来自现有 table.
  • 的索引
  • 当您想要从标量表达式对列进行分组时。例如。将 row_number() 列分组。
  • 复杂查询的可读性更高
  • 当然,它允许我们编写非常酷的递归查询