Mar*_*ret 5 sql t-sql sql-server sql-server-2005
我有一个脚本需要临时提取数据以对其执行额外的操作,但是在脚本运行后不需要再存储它.我目前在一系列临时本地表(CREATE TABLE #table)中有相关数据,然后在使用完成时将其删除.我正在考虑切换到物理表,以相同的方式处理(CREATE TABLE表),如果脚本的速度有所提高(或者其他优点,可能?).
...那么,临时表和物理表之间的性能是否存在差异?从我正在阅读的内容来看,临时表只是物理表,只有运行脚本的会话才能查看(减少锁定问题).
编辑:我应该指出,我在谈论物理表与临时表.有很多关于临时表和表变量的信息,例如http://sqlnerd.blogspot.com/2005/09/temp-tables-vs-table-variables.html.
临时表是 SQL Server 中的一大禁忌。
您的另一种方法:创建然后删除常规表只会产生相同的开销。
另一种方法:使用现有表,使用附加列来扩充行,以区分哪些行属于每个用户/会话。消除了创建/删除表的负担,但是,您将需要对生成值以区分行的代码保持偏执,并且您将必须开发一种方法来维护会话过早结束的情况下的表并且还有剩余的内容(在处理结束时未删除的行)。
我建议您重新考虑您的处理策略。有些替代方案就像使用相关查询、派生表或表变量一样简单。看一下:http ://www.sql-server-performance.com/articles/per/temp_tables_vs_variables_p1.aspx
编辑:创建和删除常规表的方法以及重用通过附加字段增强的常规表的方法:两者都会生成查询计划重新编译,因为更改的数据量将触发表统计信息的重新评估。同样,最好的方法是找到处理数据的替代方法。