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

Sql server 是否有理由将SELECT TOP与OPTION(FAST N)结合使用会改变执行计划?,sql-server,tsql,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) 假设这个有点不寻常的查询的其余部分保持不变……是否有任何原因说明添加选项(FAST N)会导致已经使用TOP的查询速度更快,或者运行方式有所不同?如果是,原因

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

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)

假设这个有点不寻常的查询的其余部分保持不变……是否有任何原因说明添加选项(FAST N)会导致已经使用TOP的查询速度更快,或者运行方式有所不同?如果是,原因是什么?

首先请参见
选项(FAST N)
检索前N行的速度,然后查询继续执行并生成完整的结果集

即使您没有提到FastN提示,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
,因为我认为您的问题已经在dba.stackexchange上得到了提问和回答,从技术上讲,它可以加快您的结果,虽然我怀疑在这样一个简单的问题上它会是正确的。不过,在更复杂的查询中,它可能会更改流程,以便更快地返回联接表的前N条记录。不过,我从来没有比较过TOP和FAST查询的查询计划,所以我不能说我确实知道。只有测试才能说明问题。我投反对票,因为dba的问题是问一些东西通常是如何工作的,而这个问题是问在特定情况下会发生什么。一般答案可能不足以回答特殊情况。@DeanOC该问题很好地涵盖了
选项(FAST N)
本身对执行计划的影响,但它通常用于一个查询中,您需要检索N条以上的记录——我想了解一下它是否有一些超出TOP已有的影响。