【问题标题】:table variables created and held in memory or in tempdb?在内存或 tempdb 中创建和保存的表变量?
【发布时间】:2011-03-31 13:27:05
【问题描述】:

表变量是在内存中还是在 tempdb 中创建的?相同的 短临时表?

【问题讨论】:

标签: sql sql-server tsql table-variable


【解决方案1】:

在 MS SQL 2014 中引入了特殊类型的表变量“内存优化表变量”。而且他们不使用 tempdb。

https://msdn.microsoft.com/en-us/library/dn535766.aspx

【讨论】:

    【解决方案2】:

    将在 tempdb 中创建一个临时表,您可以通过查询 tempdb 中的 sysobjects 表轻松检查它

    例子

    create table #test (Item char(1),  TimeSold varchar(20))
    
    select * from tempdb.sys.sysobjects
    where name like '#test%'
    

    您应该会看到名称类似于 #test_______000000000905 的内容,但随后会出现更多下划线

    如果您需要检查临时表是否存在,请参阅How Do You Check If A Temporary Table Exists In SQL Server

    表变量的结构也在 tempdb 中创建 要查看表变量,您可以这样做,但不能保证在创建他/她的表变量时没有人在您之前潜入。表变量名称类似于#7BB1235D

        declare @v table(id int) 
    select top 1 * from tempdb.sys.sysobjects
    where name like '#%'
    and name not like '%[_]%'
    order by crdate desc
    select * from @v
    

    更多信息请看这里:http://support.microsoft.com/kb/305977

    【讨论】:

      【解决方案3】:

      据我了解,表变量的结构至少总是在 TempDB 中创建。然后,作为pointed out by SQLMenace,数据可能会溢出,也可能不会溢出。

      this Microsoft Knowledge Base Article

      表变量不是仅用于内存的 结构体。因为一个表变量 可能容纳的数据多于无法容纳的数据 内存,它必须在磁盘上有一个位置 来存储数据。表变量是 在 tempdb 数据库中创建类似 到临时表。如果记忆是 可用,表变量和 创建临时表并 在内存中处理(数据 缓存)。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      • 1970-01-01
      相关资源
      最近更新 更多