表变量与临时表
YOYO
posted @ 2010年10月19日 17:36
in 【数据库】
with tags
sql server
, 2873 阅读
最近写一个存储过程,需要一个临时的表,本想用临时表,导师说表变量速度快一些,结果用了50秒,数据量大概是百万级,后面同事换成临时表,变成20秒 - -! 在创建了SQL Server优化器建议的索引后不到1秒就跑完了 Orz。
那么什么时候该用表变量,什么时候用临时表呢?
直接转不大好,贴个网址,个人觉得总结得不错:http://topic.csdn.net/u/20100610/22/fc438413-8472-40fb-b301-39ae0b8c36c4.html
其实如其所说,直接两个都试一下就知道了 = =。
非要规律的话,按照以下应该差不多……
要使用表变量应该根据如下规则来判断:
表的行数;
使用表变量能够减少的重新编译次数;
查询的类型和对索引或者统计信息的依赖程度;
需要生用UDF,UDDT,XML的时候。
其实也就说,得从实际出发,根据具体的查询,作出具体的选择。但是,其中很关键的一点,如果表的行数非常多,使用表变量其实是更费资源的。有人提出了这样的建议:对于行数较少的情况下(小于1000行)可以使用表变量;如果行数很多(有几万行),则使用临时表。