4

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

无订单执行计划:

在此处输入图像描述

订单执行计划:

在此处输入图像描述

4

1 回答 1

2

Table Spool 是“Lazy Spool”。这意味着它会记住它看到的行,但不做任何额外的工作。因为连接左侧的行现在已排序,具有相同值的重复行将一个接一个地显示。spool 允许重复使用它们而不是再次访问远程服务器。

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

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

于 2012-10-10T16:02:05.167 回答