我已经对OPTION (FAST XXX)查询提示在SELECT语句中的作用做了一些挖掘,但我仍然对此感到困惑。根据 MSDN:
指定为快速检索第一个 number_rows 优化查询。这是一个非负整数。返回第一个 number_rows 后,查询将继续执行并生成其完整结果集。
对我来说这没有多大意义,但基本上查询可以非常快地获得前 XXX 行,然后以正常速度获得其余行?
让我想到这一点的 Microsoft Dynamics 查询是:
select pjproj.project,pjproj.project_desc,pjproj.customer,pjproj.cpnyid
from pjproj WITH (NOLOCK)
where project like '%'
order by project OPTION(FAST 500)
Run Code Online (Sandbox Code Playgroud)
谁能准确解释这个查询提示在做什么以及它比不使用它的优势?
我运行一个长而复杂的查询,在 SSMS 中返回 30 多个字段和 77,000 多行。结果到网格。结果都是以文本为主。SSMS 网格在几秒 (3 - 4) 秒后开始填充结果,但查询执行时间为 2 分钟。这 2 分钟的大部分时间都是附加到 SSMS 网格中的结果。
查询什么时候“完成”?当行开始追加到 SSMS 网格时,它是在前 3 - 4 秒内完成的吗?剩下的 1 分 56 秒只是网格 UI 更新结果吗?如果查询在 3 - 4 秒后“完成”,那么我不应该考虑优化它,对吗?相反,如果查询直到 SSMS 中停止执行(整整两分钟)才完成,那么我应该能够考虑优化它?
我正在查看执行计划并从右到左阅读它。
例子:
1<-2<-3<-4
^
|_5
Run Code Online (Sandbox Code Playgroud)
所以4和5是并行执行的。当两者都完全完成时,则 3 完全执行,然后 2 完全运行,然后 1。
这是正确的还是可能存在以下情况:
3 甚至在 4 和 5 完全完成之前就开始执行。
2 甚至在 3 完全完成之前就开始执行。