SQL server 分页查询

本文深入探讨了SQL分页查询的四种方法,包括三重循环、排除法排序、ROW_NUMBER函数及OFFSET/FETCH NEXT语法,对比了不同方法的执行效率,适用于大量数据的高效分页查询。
-- 分页查询的学习:对xx的服务单数据进行分页查询,同时测试数据
-- 44万条数据的分页
-- 第一种分页查询 
set statistics time on; -- 记录查询时间
SELECT * FROM Srv_ServiceForm; -- 在不使用分页的条件下,查询已经超过一分钟仍然没有查询出数据
  1. 第一种分页方式:三重循环
SELECT TOP 1000 * 
        FROM Srv_ServiceForm 
        WHERE Srv_SFCode NOT IN ( SELECT TOP 1000 Srv_SFCode FROM Srv_ServiceForm ORDER BY Srv_SFCode DESC ) 
        ORDER BY Srv_SFCode DESC
     SQL Server 执行时间:
     CPU 时间 = 109 毫秒,占用时间 = 5380 毫秒。
     > OK
     > 时间: 5.444s

注:通过看到另一种思路,比如要查询每10条记录的第二页数据
可以先查询20条记录,然后倒叙排列,在这个基础上查询10条记录,则获取到的就是
就是分页的第二页,不过数据是倒叙的

select * from (
select top 10 * from (select top 20 * from Srv_ServiceForm order by Srv_SFDate desc) as cir2 order by Srv_SFDate asc
) as cir3 order by Srv_SFDate desc
  1. 第二种分页方式:将排序之前的通过大小排除掉,剩余的进行排序切割
-- 分页查询第2页,每页有10条记录
select top 10 * from student 
where sNo>=
(select max(sNo) from (select top 11 sNo from student order by sNo asc) temp_max_ids) 
order by sNo;
  1. 第三种分页方式:利用row_number
-- 分页查询(通用型)
select top pageSize * 
from (select row_number() 
over(order by sno asc) as rownumber,* 
from student) temp_row
where rownumber>((pageIndex-1)*pageSize);

-- 分页查询第2页,每页有10条记录
select top 10 * 
from (select row_number() 
over(order by sno asc) as rownumber,* 
from student) temp_row
where rownumber>10;
  1. 第4种分页方式:直接使用offset/fetch next
select * from student
order by ID 
offset 20 rows -- 跳过多少条
fetch next 10 rows only -- 查询多少条
参考链接:https://blog.csdn.net/weixin_37610397/article/details/80892426
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值