在SQLServer中加速临时表联接
我有两张临时表#temp1和#temp。两者都有键和日期列。两者都有大约2.5万行。我会根据所有行上唯一的键和日期加入它们。完成此连接大约需要4分钟。有什么方法可以加快它的速度或其他方法吗?我相信您可以像在任何其他表上一样在临时表上创建索引。我怀疑您可能需要查看整个查询。也许还有另一种方法可以剥下这只兔子的皮在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表的连接
您能留下一些更详细的信息吗?根据您所做的工作,您可能会完全避免使用临时表,并使用基于集合的解决方案(这将运行得更快,扩展性更好),但如果不知道您的查询是什么,则很难知道。如果
25k
表的连接需要4
分钟,有点不对劲
很可能您设置了错误的JOIN
条件,导致笛卡尔连接(或接近笛卡尔连接的东西),从而返回25k*25k=625M
记录
这可能需要4
分钟,如果不是更多的话,但我认为这不是你想要的
您的查询中可能有DISTINCT
/GROUP BY
子句,这使得查询以非最佳方式返回正确的结果集
请您发布您的查询,以便我能说出确切的原因吗?我的查询写作技能不为人知。但这种索引建议似乎奏效了。我在一个临时表的连接列上创建了一个聚集索引,现在它的返回结果非常快。这是一个好主意——同时在临时表上指定一个主键。我不确定在25k上创建索引是否会给您带来任何性能好处。回想起来,在SQLServer开始使用索引之前,似乎有一个阈值。否则它将进行表扫描,因为它比每次遍历和索引都要快。我会将两者作为基准。从索引中得到的关键是数据现在已经“预排序”。如果做得好,优化器应该能够使用合并联接或嵌套循环而不是哈希匹配。我仍然对临时表的实际需要提出疑问。您能发布一个我们可以使用的复制脚本吗?