在SQL Server存储过程上插入表格变量表现不佳(Table variable poor per

2019-09-02 05:54发布

我们正在经历用在存储过程中的表变量的性能问题。

下面是实际发生的情况:

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 ...

什么会导致行为?

Answer 1:

使用临时表。 你会看到更好的性能。

对于这背后的原因的详细说明已超出原有问题的范围不过来概括:

  • 也就是说,它假定1列将返回一个表变量一行进行了优化,由SQL Server。
  • 表变量不创建统计。

谷歌临时表比。 对于丰富的资源和讨论的表变量 。 如果再需要具体的援助,炒了我的电子邮件或联系我的Twitter上。



Answer 2:

通常,对于较小的数据集,表变量应该比一个临时表更快。 对于更大的数据集,性能会掉下来,因为表变量不支持并行(见这个职位 )。

随着中说,我没有经历过,或者发现经验这么小的一组数据是一个表变量VS临时表慢。



Answer 3:

不,应该没关系,但什么是您的选择是什么样子? 我在SQL Server 2005中一个问题,我就可以自己选择跑比较快的什么我的查询在做说5分钟,所有的数据通过有线返回约150,000行。 但是,当我试图插入相同的选择到一个临时表或表变量的声明跑了1个多小时之前,我杀了它。 我还没有搞清楚真正是怎么回事。 我最终将查询提示力秩序,并开始将更快。



Answer 4:

有关临时表的关键点还在于,你可以把索引,等他们,而你不能用表变量。



文章来源: Table variable poor performance on insert in SQL Server Stored Procedure