在SQL Server 2005中,我们可以通过以下两种方式之一创建临时表:
declare @tmp table (Col1 int, Col2 int);
Run Code Online (Sandbox Code Playgroud)
要么
create table #tmp (Col1 int, Col2 int);
Run Code Online (Sandbox Code Playgroud)
这两者有什么不同?关于@tmp是否仍然使用tempdb,或者是否所有内容都发生在内存中,我已经阅读了相互矛盾的意见.
在哪种情况下,一个人胜过另一个?
我正在学习表变量的更多细节.它表示临时表总是在磁盘上,表变量在内存中,也就是说,表变量的性能优于临时表,因为表变量比临时表使用更少的IO操作.
但有时,如果表变量中的记录太多而无法包含在内存中,则表变量将像临时表一样放在磁盘上.
但我不知道"太多记录"是什么.100,000条记录?或1000,000条记录?我怎么知道我正在使用的表变量是在内存中还是在磁盘上?SQL Server 2005中是否有任何函数或工具来测量表变量的大小或让我知道何时将表变量从内存放入磁盘?