是否有理由将SELECT TOP与OPTION(FAST N)结合使用会改变执行计划?

时间:2018-07-24 22:15:47

标签: sql-server tsql

这是我最近查看的查询示例:

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的查询运行得更快,或者运行方式是否不同?如果是这样,为什么?

1 个答案:

答案 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 NOPTION (FAST N),我只会提到TOP N,其中N <= 50或N <= 100(大约)

然后两者执行相同的操作。选中XML查询计划。

如果我使用N> = 3000的值,则用Top NOPTION (FAST N)进行的查询要比单独使用TOP N的查询效果差。

尽管GUI execution的计划是相同的,但您可以看到XML query plan的不同之处。

我注意到QueryHash,CompileTime and CompileCPU是不同的。CompileTimeCompileCPUTop NOPTION (FAST N)的查询中都较高

您做类似的实验。