提示选项(快速n)对我没有任何影响

时间:2017-12-20 22:12:57

标签: sql sql-server tsql

我有一个大表和查询,由非索引列排序。 我这样做是为了声明一个游标,因为我需要用于分页的行,这意味着前面的第一行是N行,然后是后面的N行。

DECLARE cur CURSOR FOR select col1,col2 from table order by col2;

我知道Sql Server可以优化以快速提供前N行,因为如果我说TOP(N),那么它会非常快地返回,例如:

DECLARE cur CURSOR FOR select TOP(@N) col1,col2 from table order by col2;

我已经读过,我可以要求服务器快速提供前N行,所以我已经尝试过了:

DECLARE cur CURSOR FOR select TOP(@N) col1,col2 from table order by col2 OPTION (FAST @N);

不幸的是没有效果,即它没有提示那么慢。 为什么? 怎么解决?

1 个答案:

答案 0 :(得分:3)

FAST选项在您应用它的查询中没有任何区别。

它会产生任何差异的查询通常会有几个不同的连接,因此查询规划器将有一些不同的选择来检索数据。加入数据时,总体上会有更快的方式,以及快速返回第一行但整体速度较慢的方法。如果为存在这些选项的查询指定FAST选项,则查询计划程序将选择更快地返回第一行的查询计划程序。

当您对一个总是很慢的非索引列进行排序时,因为必须先读取整个表,然后才能返回第一行。添加索引实际上是使查询更快的唯一方法。