Sql server 带分页的SQL Server查询-不同页面的不同时间

Sql server 带分页的SQL Server查询-不同页面的不同时间,sql-server,performance,Sql Server,Performance,我有一个包含12000条记录的表,我有一个查询,其中这个表与几个表和分页连接在一起。我使用设置统计时间开/关来测量时间。第一页的速度非常快,但离最后一页越近,所需时间就越长。正常吗?这是正常的,因为SQL Server无法直接搜索逻辑查询的给定页面。它扫描一系列结果,直到到达您想要的页面 如果需要固定时间分页,则需要在索引上提供某种类型的seek键。例如,如果您可以保证您的ID int列具有以1开头的连续值,则只需说出WHERE ID>=。。。和ID@OldMaxCol1按Col1排序。在这种情

我有一个包含12000条记录的表,我有一个查询,其中这个表与几个表和分页连接在一起。我使用
设置统计时间开/关
来测量时间。第一页的速度非常快,但离最后一页越近,所需时间就越长。正常吗?

这是正常的,因为SQL Server无法直接搜索逻辑查询的给定页面。它扫描一系列结果,直到到达您想要的页面

如果需要固定时间分页,则需要在索引上提供某种类型的seek键。例如,如果您可以保证您的
ID int
列具有以
1
开头的连续值,则只需说出
WHERE ID>=。。。和ID<…


我相信您会在web上找到其他方法,但产品中没有内置任何内容。

这取决于您如何进行分页。使用
row\u number()
offset-fetch
则是,这就是预期的结果。@Mikael-Eriksson是,我使用row\u number()。是否可以在不增加时间的情况下使用另一种方式(不是行数或偏移量提取)进行分页?取决于具体情况。我见过一个(从未见过)使用api游标。当然,您可以记住在ORDERBY中使用的最后一个值,并在where子句中使用该值获取下一个X行数<代码>选择顶部(X)。。。从…起其中Col1>@OldMaxCol1按Col1排序。在这种情况下,它可以对Col1进行搜索,并只扫描支持索引中的X行。