表变量在SQL Server存储过程中插入时性能不佳

Max*_*eat 9 sql-server stored-procedures temp-tables table-variable

我们在存储过程中使用表变量时遇到性能问题.

这是实际发生的事情:

DECLARE @tblTemp TABLE(iId_company INT)

INSERT INTO @tblTemp(iId_company)
  SELECT id FROM .....
Run Code Online (Sandbox Code Playgroud)

SELECT返回138个结果,但插入TABLE变量需要1分15但是当我使用具有相同SELECT的临时表时,woops需要0sec:

CREATE TABLE #temp (iId_company INT)

INSERT INTO #temp(iId_company)
  SELECT id FROM ...
Run Code Online (Sandbox Code Playgroud)

什么可能导致这种行为?

Joh*_*som 10

使用临时表.你会看到更好的表现.

对此背后的原因的详细解释超出了最初问题的范围,但总结如下:

  • SQL Server的表变量针对一行进行了优化,即它假定将返回1行.
  • 表变量不会创建统计信息.

谷歌临时表比.表变量用于丰富的资源和讨论.如果您需要特定帮助,请给我发电子邮件或在Twitter上与我联系.