sql-server – SQL Server:添加ORDER BY时的表空间

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

当我在没有订购的情况下运行查询时它会立即返回,但是当我添加ORDER BY日期时,返回大约需要4秒.我让SQL Server显示了执行计划,并且看起来缓慢是在仅在连接上发生的表假脱机操作中引入的.有没有办法阻止这种“优化”?

查询:

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' ) 

没有订单的执行计划:

订单执行计划:

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

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

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

点赞