在SQLServer中加速临时表联接

在SQLServer中加速临时表联接,sql,sql-server,sql-server-2005,join,temp-tables,Sql,Sql Server,Sql Server 2005,Join,Temp Tables,我有两张临时表#temp1和#temp。两者都有键和日期列。两者都有大约2.5万行。我会根据所有行上唯一的键和日期加入它们。完成此连接大约需要4分钟。有什么方法可以加快它的速度或其他方法吗?我相信您可以像在任何其他表上一样在临时表上创建索引。我怀疑您可能需要查看整个查询。也许还有另一种方法可以剥下这只兔子的皮 您能留下一些更详细的信息吗?根据您所做的工作,您可能会完全避免使用临时表,并使用基于集合的解决方案(这将运行得更快,扩展性更好),但如果不知道您的查询是什么,则很难知道。如果25k表的连接

我有两张临时表#temp1和#temp。两者都有键和日期列。两者都有大约2.5万行。我会根据所有行上唯一的键和日期加入它们。完成此连接大约需要4分钟。有什么方法可以加快它的速度或其他方法吗?

我相信您可以像在任何其他表上一样在临时表上创建索引。

我怀疑您可能需要查看整个查询。也许还有另一种方法可以剥下这只兔子的皮


您能留下一些更详细的信息吗?

根据您所做的工作,您可能会完全避免使用临时表,并使用基于集合的解决方案(这将运行得更快,扩展性更好),但如果不知道您的查询是什么,则很难知道。

如果
25k
表的连接需要
4
分钟,有点不对劲

很可能您设置了错误的
JOIN
条件,导致笛卡尔连接(或接近笛卡尔连接的东西),从而返回
25k*25k=625M
记录

这可能需要
4
分钟,如果不是更多的话,但我认为这不是你想要的

您的查询中可能有
DISTINCT
/
GROUP BY
子句,这使得查询以非最佳方式返回正确的结果集


请您发布您的查询,以便我能说出确切的原因吗?

我的查询写作技能不为人知。但这种索引建议似乎奏效了。我在一个临时表的连接列上创建了一个聚集索引,现在它的返回结果非常快。这是一个好主意——同时在临时表上指定一个主键。我不确定在25k上创建索引是否会给您带来任何性能好处。回想起来,在SQLServer开始使用索引之前,似乎有一个阈值。否则它将进行表扫描,因为它比每次遍历和索引都要快。我会将两者作为基准。从索引中得到的关键是数据现在已经“预排序”。如果做得好,优化器应该能够使用合并联接或嵌套循环而不是哈希匹配。我仍然对临时表的实际需要提出疑问。您能发布一个我们可以使用的复制脚本吗?