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