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() 列分组。
- 复杂查询的可读性更高
- 当然,它允许我们编写非常酷的递归查询
据我了解,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() 列分组。
- 复杂查询的可读性更高
- 当然,它允许我们编写非常酷的递归查询