我们正在经历用在存储过程中的表变量的性能问题。
下面是实际发生的情况:
DECLARE @tblTemp TABLE(iId_company INT)
INSERT INTO @tblTemp(iId_company)
SELECT id FROM .....
该SELECT返回138倍的结果,但在表中插入可变需要1min15但是当我使用临时表具有相同的SELECT,woops,需要0秒:
CREATE TABLE #temp (iId_company INT)
INSERT INTO #temp(iId_company)
SELECT id FROM ...
什么会导致行为?
使用临时表。 你会看到更好的性能。
对于这背后的原因的详细说明已超出原有问题的范围不过来概括:
- 也就是说,它假定1列将返回一个表变量一行进行了优化,由SQL Server。
- 表变量不创建统计。
谷歌临时表比。 对于丰富的资源和讨论的表变量 。 如果再需要具体的援助,炒了我的电子邮件或联系我的Twitter上。
通常,对于较小的数据集,表变量应该比一个临时表更快。 对于更大的数据集,性能会掉下来,因为表变量不支持并行(见这个职位 )。
随着中说,我没有经历过,或者发现经验这么小的一组数据是一个表变量VS临时表慢。
不,应该没关系,但什么是您的选择是什么样子? 我在SQL Server 2005中一个问题,我就可以自己选择跑比较快的什么我的查询在做说5分钟,所有的数据通过有线返回约150,000行。 但是,当我试图插入相同的选择到一个临时表或表变量的声明跑了1个多小时之前,我杀了它。 我还没有搞清楚真正是怎么回事。 我最终将查询提示力秩序,并开始将更快。
有关临时表的关键点还在于,你可以把索引,等他们,而你不能用表变量。