【问题标题】:What is the difference between creating a temp table in SQL Server as #TempTable and TempDb.dbo.TembName and which one gives better performance?在 SQL Server 中将临时表创建为 #TempTable 和 TempDb.dbo.TembName 有什么区别,哪一个提供更好的性能?
【发布时间】:2020-11-13 17:28:38
【问题描述】:

#TempTable 和 TempDb.dbo.TembName 之间的主要区别是什么。因为它们在一天结束时都是临时表。那么我为什么要使用一个而不是另一个呢?

【问题讨论】:

  • #TempTable 也在 TempDB 中创建并持续存在直到它被删除。

标签: sql-server tsql stored-procedures temp-tables


【解决方案1】:

没有性能差异。 #TempTable 仅对单个会话可见,并在会话结束时自动删除(如果在顶级批处理中创建),或者在批处理或存储过程结束时(如果在嵌套批处理或存储过程中创建) )。 tempdb 中的常规表对所有会话都是可见的,并且在服务器重新启动之前不会自动删除。

【讨论】:

    【解决方案2】:

    性能没有任何区别,但 #temp 表在用户会话结束时被清空(在许多情况下,架构保留在 SQL Server 2005 的缓存中),而普通表保留在 TempDB 中,直到您重新启动 istance 或手动删除它。

    临时表表变量之间存在许多差异。 两者都在 TempDB 中(以消除一些误解)但是:

    • 默认情况下,临时表具有统计信息,而对于表变量,引擎始终估计 1 行(也使用 InMemory 选项)。 从 CU3 di SQL 2014 和 SP2 di SQL 2012 起,您可以使用跟踪标志 2453 启用表变量中的统计信息,但您必须注意性能方面的影响。
    • 在 SQL Server 2014 之前,如果您需要添加非聚集索引,则不能在表变量中内联添加,并利用 SQL Server 2005 引入的objects caching
    • 临时表支持事务,而表变量不支持。
    • 临时表可通过在创建它们的存储过程中调用的存储过程进行访问,而表变量编号为。
    • 表变量不支持TRUNCATE TABLE 语句,而临时表支持它。
    • 基本上,tables 变量需要的锁存器和事务日志记录比临时表少得多。

    【讨论】:

      猜你喜欢
      • 2017-08-14
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 1970-01-01
      相关资源
      最近更新 更多