绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
利用row_number()over() 进行分页查询。
2023-03-20 16:06:41
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')

分享好友

分享这个小栈给你的朋友们,一起进步吧。

SQLServer
创建时间:2023-03-20 14:06:14
美国Microsoft公司推出的一种关系型数据库系统。SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 飘絮絮絮丶
    专家
戳我,来吐槽~