1.一个sqlserver数据库实例上只能有一个tempdb数据库,这个实例上所有的用户都共享这个数据库。
2.tempdb数据库在每次sqlserver重启后都会重新创建,所以数据会丢失。
3.因为tempdb数据库上面的特性所以对tempdb数据库的操作日志不会保存重做信息,所以相比正常数据库来说,tempdb拥有更好的性能。
4.tempdb存储的用户对象有全局临时表,本地临时表,表变量。
5.在创建他们的会话关闭时局部临时表和全局临时表都会被删除。
6.表变量和局部临时表的区别在于表变量没有统计信息,表变量的作用范围为批处理而不是会话,不能为表变量创建索引,表变量不支持架构修改。注意他们都是存储在磁盘的数据,但可能有缓存。
7.由于表变量没有统计信息,所以表变量的操作数据速度要比临时表快,但也真因为此,表变量数据多时,查询优化器无法创建合适的查询计划会造成查询速度很慢。
8.无论是实用临时表还是表变量都要经过全面的性能测试,但最好倾向于使用临时表,问题少。
9.tempdb也是闩锁争用的易发地,解决办法有两个,一是创建多个tenpdb数据文件进行分压。二是创建易于重用的的临时对象,避免重复创建,重用的临时对象有几个特点
:没有创建命名约束,没创建索引的对表造成影响的语句,不是通过动态sql创建的,不由另一个对象创建如存储过程,触发器,用户定义函数,用户定义的标值函数返回的表。
有好多动态管理视图可以查看一些临时表相关信息。