这是我最近查看的查询示例:
SELECT TOP 10 id, name
FROM example_table WITH(NOLOCK)
INNER JOIN example_table2 WITH(NOLOCK)
ON example_table.x = example_table2.id
OPTION (FAST 10)
假设此查询中的其余部分保持不变...是否有任何理由为什么添加OPTION(FAST N)会使已经使用TOP的查询运行得更快,或者运行方式是否不同?如果是这样,为什么?
答案 0 :(得分:0)
请首先查看OPTION (FAST N)
,以最快的速度检索前N行,然后查询继续执行并产生其完整结果集。
即使您不提及FAST N提示,SQL查询也会快速返回前N行,其中N取决于查询来查询和执行计划。
例如,
SELECT id, name
FROM example_table WITH(NOLOCK)
INNER JOIN example_table2 WITH(NOLOCK)
ON example_table.x = example_table2.id
假设此查询返回8000行,而前50行返回得更快
如果我在同一查询和另一个窗口中同时提到Top N
和OPTION (FAST N)
,我只会提到TOP N
,其中N <= 50或N <= 100(大约)
然后两者执行相同的操作。选中XML查询计划。
如果我使用N> = 3000的值,则用Top N
和OPTION (FAST N)
进行的查询要比单独使用TOP N
的查询效果差。
尽管GUI execution
的计划是相同的,但您可以看到XML query plan
的不同之处。
我注意到QueryHash,CompileTime and CompileCPU
是不同的。CompileTime
和CompileCPU
在Top N
和OPTION (FAST N)
的查询中都较高
您做类似的实验。