sqlserver高性能分页sql

本文探讨了两种SQL分页查询语句的性能对比,分析了为何第一种使用ROW_NUMBER()的分页方法虽常见但在大数据量下效率不佳,而第二种通过设定滚动基线和限制查询范围的方法,在减少全表扫描的同时,显著提升了分页查询的速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我查资料大部分分页查询在查询后面分页时候,性能下降非常厉害,查资料啥的,找到个不错的分页语句.

第一个分页语句

SELECT StatisticsDate,* FROM ((select ROW_NUMBER() over(order by BusinessID) as row_num,* from OverDueStatic WITH(NOLOCK) where StatisticsDate='2018-7-18')) o where o.row_num between 0 and 5

大部分这个语句性能够高了,但实际还是不理想,因为主查询语句,扫全表。

第二个分页语句

Declare @bid int 
Declare @start int 
Declare @pagesize int 

SET @start=5
SET @pagesize=10

--下面两行实现快速滚动到我们要取的数据的行,并把ID记录下来 
Set Rowcount @start 
Select @bid=BusinessID from OverDueStatic WITH(NOLOCK) WHERE StatisticsDate='2018-7-18' Order by BusinessID

Set Rowcount @pagesize 
--能不用*就不用 
Select BusinessID,* From OverDueStatic o WITH(NOLOCK) WHERE StatisticsDate='2018-7-18' AND BusinessID>=@bid Order By o.BusinessID
Set Rowcount 0 

 

这个语句性能不错,回来测试下具体情况

 

转载于:https://my.oschina.net/uwith/blog/1862125

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值