【发布时间】:2012-08-05 03:58:52
【问题描述】:
我正在了解更多关于表变量的详细信息。它说临时表总是在磁盘上,而表变量在内存中,也就是说,表变量的性能优于临时表,因为表变量使用的IO操作比临时表少。
但有时,如果一个表变量中有太多的记录无法包含在内存中,那么该表变量会像临时表一样放在磁盘上。
但我不知道“太多记录”是什么。 100,000 条记录?还是 1000,000 条记录?我如何知道我正在使用的表变量是在内存中还是在磁盘上? SQL Server 2005 中是否有任何函数或工具可以测量表变量的规模或让我知道表变量何时从内存放入磁盘?
【问题讨论】:
-
表变量几乎总是在
tempDB中——“在内存中”是一个神话。另外:查询优化器将始终认为表变量只保留一行 - 如果您有更多,这可能会导致执行计划严重错误。 -
您可能会发现这很有帮助stackoverflow.com/questions/27894/…
-
@marc_s - 您可以在该语句中删除“几乎”。它总是在
tempdb中(但也可能完全在内存中) -
使用 SQL 2014,您现在可以在内存中创建表变量
标签: sql-server temp-tables table-variable