ITPub博客

首页 > > > 利用row_number()over() 进行分页查询。

利用row_number()over() 进行分页查询。

作者:飘絮絮絮丶 时间:2023-03-20 16:06:41 0 删除 编辑
declare
 @bid int --开始id
,@eid int --结束id
set @bid='1'
set @eid='18'

select * from (select row_number()over(order by vaa03 ) id ,编码
from 基础表  
where right(convert(varchar(20),生日,23),5)
=right(convert(varchar(20),GETDATE(),23),5))a
where id between @id and @ids

之前查阅了一些资料,自己认为2008版本的数据库,利用row_number()over() 函数,对查询结果进行分页还是比较简单易懂的。

上述代码是查询当天过生日的人,并利用row_number()over() 函数生成id,然后利用between ''and'' 对id 进行查询。即实现分页查询。

row_number()over() 分页还是比较高效的,相比top to p分页也要优雅很多(尴尬一笑)。

当然ROW_NUMBER分页在大页数时存在性能问题,是可以通过一些技巧来进行规避的。如果你的条件中带有运算符或者使用函数等,则查询引擎会放弃优化,而执行表扫描。如下代码,执行时间1秒,而去掉WHERE条件后执行时间不到一秒。后来才知道 这叫欺骗查询引擎。

select * from (select row_number()over(order by vaa03 ) id ,VAA03
from VAA1  
where right(convert(varchar(20),vaa12,23),5)=right(convert(varchar(20),GETDATE(),23),5))a
where id  in('1000','1018')

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3140948/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42234