我有一个非常简单的查询,我正在尝试优化。 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/

10-09 08:04
查看更多