在SQL Server编写查询时,我注意到内部查询中的数据是与另一个表连接时的派生表,需要很长时间。加入外部表的键位于主键上。所以我很惊讶,因为数据大约有10,000条记录和15列。
但是如果我们将派生表中的数据存储在临时表中,然后加入性能不到2秒。这让我想知道原因是什么?
答案 0 :(得分:1)
评论太长了。
首先,您应该编辑您的问题并显示您的查询。 。 。或者至少是查询的结构。
您的问题可能是由于查询的优化。创建临时表时,生成的查询在编译阶段具有关于表的准确统计信息。
当您使用派生表时,SQL Server必须猜测中间表的大小,并在知道实际之前决定执行计划。这似乎是猜测错误的情况。
如果你不想使用临时表,你可能会使用提示获得相同的效果,可能是join
使用哈希或合并排序算法(根据我的经验,嵌套循环算法通常是性能不佳的原因)。