我有一个非常简单的查询,我正在尝试优化。 issue_notes 是一个简单的表,而 meta_users 是我通过 View 查询的远程数据库服务器上的一个表。
当我在没有排序的情况下运行查询时,它会立即返回,但是当我添加 ORDER BY date
时,它需要大约 4 秒才能返回。我让 SQL Server 显示了执行计划,似乎在仅在连接上发生的 Table Spool
操作中引入了缓慢。有没有办法防止这种“优化”?
询问:
SELECT
[issues_notes].[date],
[meta_users].[firstname],
[meta_users].[lastname],
[issues_notes].[note]
FROM
[issues_notes]
LEFT JOIN [issues_issue]
ON ([issues_notes].[issue_id] = [issues_issue].[id])
LEFT OUTER JOIN [meta_users]
ON ([issues_notes].[author_id] = [meta_users].[userid])
WHERE
([issues_issue].[issue_hash] = '%s' )
无订单执行计划:
执行计划与 Order By:
最佳答案
Table Spool 是一个“Lazy Spool”。这意味着它记住它看到的行,但不做任何额外的工作。由于连接左侧的行现在已排序,具有相同值的重复行将一个接一个地显示出来。线轴允许仅重用它们而不是再次访问远程服务器。
排序本身是一个阻塞运算符。这意味着它将在排序之前保存所有行,并仅在排序完成后返回它们。
我们在这里谈论多少行?两个查询的总执行时间是多少?
关于sql-server - SQL Server : Table Spool when adding ORDER BY,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12823320/