0

在 SQL Server 中编写查询时,我注意到内部查询中的数据是派生表,当与另一个表连接时需要很长时间。连接到外部表的键位于主键上。所以我很惊讶,因为数据大约有 10,000 条记录和 15 列。

但是,如果我们将派生表中的数据存储在临时表中,然后加入,则性能不到 2 秒。这让我想知道原因是什么?

4

1 回答 1

1

首先,您应该编辑您的问题并显示您的查询。. . 或者至少是查询的结构。

您的问题可能是由于查询优化所致。当您创建临时表时,生成的查询会在编译阶段获得有关该表的准确统计信息。

当您使用派生表时,SQL Server 必须猜测中间表的大小并在知道实际值之前决定执行计划。这似乎是猜测错误的情况。

如果您不想使用临时表,您可能可以使用提示获得相同的效果,可能是因为join使用哈希或合并排序算法(根据我的经验,嵌套循环算法通常是性能不佳的原因)。

于 2015-08-04T13:08:24.937 回答