日期:2014-05-17  浏览次数:20382 次

表变量存在于内存中难道一直是被误解的!!
今天看《sqlserver2005技术内幕》作者在文中写到:表变量被误解的两个理解,一种是表变量存在于内存中,另外一种是表变量比临时表更好。
因此我还网上特意再搜索一下表变量与临时表的区别,几乎都是写表变量存在于内存中,怎么会有这样的误传???
该书中写到其实临时表与表变量都是物理的形式存在于tempdb中,当表足够小,sqlserver有足够内存时临时表与表变量的页都会驻留在缓存中

------解决方案--------------------
引用:
谢谢6,7楼的测试案例,证明表变量跟tempdb有关.
案例中用到的DMV: sys.dm_os_buffer_descriptors 应该是跟内存(buffer pool)有关的喔.
参考 http://msdn.microsoft.com/en-us/library/ms173442(v=sql.105).aspx

之前做过测试: 用大循环,给一个表变量循环插入记录, 用windows性能监视器, 可以看到从程序执行那一刻起, 内存是线性增长的..

你说得这个“sys.dm_os_buffer_descriptors 应该是跟内存(buffer pool)有关的喔 ”提得太好了,我正愁没有这样的机会对这点进行解释,我在吃饭,吃完后会详细解释表变量,临时表的第三大误解。