-- 分页查询的学习:对xx的服务单数据进行分页查询,同时测试数据
-- 44万条数据的分页
-- 第一种分页查询
set statistics time on; -- 记录查询时间
SELECT * FROM Srv_ServiceForm; -- 在不使用分页的条件下,查询已经超过一分钟仍然没有查询出数据
- 第一种分页方式:三重循环
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
- 第二种分页方式:将排序之前的通过大小排除掉,剩余的进行排序切割
-- 分页查询第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;
- 第三种分页方式:利用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;
- 第4种分页方式:直接使用offset/fetch next
select * from student
order by ID
offset 20 rows -- 跳过多少条
fetch next 10 rows only -- 查询多少条
本文深入探讨了SQL分页查询的四种方法,包括三重循环、排除法排序、ROW_NUMBER函数及OFFSET/FETCH NEXT语法,对比了不同方法的执行效率,适用于大量数据的高效分页查询。


被折叠的 条评论
为什么被折叠?



