代码之家  ›  专栏  ›  技术社区  ›  Chris Brandon

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

  •  0
  • Chris Brandon  · 技术社区  · 6 年前

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

    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的查询速度更快,或者运行方式有所不同?如果是,为什么?

    1 回复  |  直到 6 年前
        1
  •  0
  •   KumarHarsh    6 年前

    首先看 OPTION (FAST N) 检索前N行的速度比查询继续执行并生成完整结果集的速度快。

    即使您没有提到FAST N hint,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 选项(快速N) 在同一个查询和我刚才提到的另一个窗口中 TOP N 其中N<=50或N<=100(大致)

    然后两者的表现相同。检查XML查询计划。

    如果我使用N的值>=3000然后用 选项(快速N) 表现不如 单独地

    虽然 GUI execution 计划是一样的,你可以在 XML query plan .

    我注意到 QueryHash,CompileTime and CompileCPU 我们不一样。 CompileTime CompileCPU 两者都有更高的要求 选项(快速N)

    你做了类似的实验。