我经常使用临时表来简化数据加载(更容易调试,更清晰的select语句等)。如果性能需要它,我将创建一个物理表等。
我最近注意到我自动将临时表声明为全局(## temp_load)而不是本地(#temp_table)。我不知道为什么,但这是我多年来的习惯。我从不需要这些表是全局的,但我很好奇是否有额外的开销将它们创建为全局。我应该努力改变我的习惯。
是否存在使其全球化的其他风险?
答案 0 :(得分:2)
几乎可以保证非全局临时表永远不会发生冲突。
全局临时表与具体化表类似,因为每个服务器的名称必须是唯一的。
通常情况下,只在必要时才使用##GLOBAL_TEMP
表。
否则,如果您正在编写一个可以同时运行多次的proc,则procs将以不可预测的方式相互交互,使得排除故障非常困难 - Instance 1
可以更改{ {1}}会导致Instance 2
生成错误的结果。
我对Temp表的个人意见是我只在以下情况下使用它们:
我强调了最后一颗子弹,因为这是我尝试最小化临时表使用的主要原因:
如果您有一个长时间运行的进程,并且使用临时表来存储中间数据集,并且有90%的时间已经死亡,则必须完全重启如果该数据是大部分时间都不在物化表中。
我的一些进程在数十亿行数据上运行了几天,所以我对从头开始重新启动不感兴趣。