SQL Server:添加ORDER BY时的表假脱机

时间:2012-10-10 15:44:38

标签: sql-server sql-server-2008

我有一个非常简单的查询,我正在尝试优化。 issues_notes是一个简单的表,而meta_users是我通过视图查询的远程数据库服务器上的表。

当我在没有排序的情况下运行查询时立即返回,但是当我添加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' ) 

没有订单的执行计划:

enter image description here

按订单执行计划:

enter image description here

1 个答案:

答案 0 :(得分:2)

Table Spool是一个“Lazy Spool”。这意味着它会记住它已经看过的行,但不会做任何额外的工作。因为现在对连接左侧的行进行了排序,所以具有相同值的重复行将一个接一个地显示出来。假脱机允许重用它们,而不是再次点击远程服务器。

排序本身是一个阻塞运算符。这意味着它将在排序之前保存所有行,并仅在排序完成后返回它们。

我们在这说多少行?两个查询的总执行时间是多少?