我有一个非常简单的查询,我正在尝试优化。 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' )
没有订单的执行计划:
按订单执行计划:
答案 0 :(得分:2)
Table Spool是一个“Lazy Spool”。这意味着它会记住它已经看过的行,但不会做任何额外的工作。因为现在对连接左侧的行进行了排序,所以具有相同值的重复行将一个接一个地显示出来。假脱机允许重用它们,而不是再次点击远程服务器。
排序本身是一个阻塞运算符。这意味着它将在排序之前保存所有行,并仅在排序完成后返回它们。
我们在这说多少行?两个查询的总执行时间是多少?