随笔-52  评论-329  文章-0  trackbacks-6
1 临时表可以支持事务级的回滚操作(undo),但不支持前滚操作(redo),表变量不支持事务级的回滚操作,只是支持语句级的回滚。
2 临时表上的统计信息是健全而可靠的,但是表变量上的统计信息是不可靠的。
3 临时表的编译阀值非常低,但是表变量的编译阀值更低。这个后朋友寻觅经过测试,表变量是不存在编译阀值的。
4 范围不同。临时表为会话级,表变量为变量级,在自己的代码声明区间内有效。
5 表变量只能指定primary key做隐式的索引,但是临时表可以显式创建各种索引。
6 在2000和2005的区别里,表变量和临时表的差异更加显著。
7 表变量不支持修改自身的定义。
8 修改表变量的语句中,不能使用并行的执行计划。

在我的实际编程调优经验中,表变量一般只是应用于超小型表,比如100行以内,不然表变量极易引起重编译和未知的性能问题。
不过具体的行数可以根据实际情况,使用临时表和表变量两种方案对比,哪个更快再来作出最切合实际的决定。
posted on 2008-02-26 23:21 PerfectDesign 阅读(9190) 评论(11)  编辑 收藏

评论:
#1楼  2008-02-26 23:43 | 寻觅 [未注册用户]
顶一下,呵呵
  回复  引用    
#2楼 [楼主] 2008-02-26 23:58 | PerfectDesign      
呵呵,谢谢寻觅兄
  回复  引用  查看    
#3楼  2008-02-27 11:29 | 汉广      
不错,还有临时表和表变量在存储方式上有什么不同?

-------------------------
汉广同学正在找工作,你可以点击这里 ,浏览他的简历,欢迎点评:-)

  回复  引用  查看    
#4楼 [楼主] 2008-02-27 13:19 | PerfectDesign      
都在内存中
  回复  引用  查看    
#5楼  2008-02-28 16:37 | stswordman      
@广汉
临时表存储在tempdb中,
表变量一般存储在内存中,如果数据量过大,则溢出部分存放在tempdb中
  回复  引用  查看    
#6楼 [楼主] 2008-02-28 21:54 | PerfectDesign      
tempdb的数据基本上都会被加载到内存,因为局部临时表生存期很短,除了全局临时表
  回复  引用  查看    
#7楼  2008-02-29 12:48 | OK_008      
不错,学习经验!
  回复  引用  查看    
#8楼  2008-04-23 20:42 | 留恋星空      
hehe
  回复  引用  查看    
#9楼  2008-04-24 10:11 | 马可香蕉      
提问:什么叫事务级的回滚,什么叫语句级的回滚,举个例子
  回复  引用  查看    
#10楼 [楼主] 2008-04-24 10:23 | PerfectDesign      
@马可香蕉
显式事务称作事务级,语句级事务是隐式事务,
tsql内将每一条语句看成是一个隐式的事务,如果执行不成功,都会回滚。
  回复  引用  查看    
#11楼 [楼主] 2008-08-07 15:33 | PerfectDesign      
表变量的操作也是写事务日志的
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-02-28 00:03 编辑过