sql分页查询代码三种方法效率对比

发布时间:2020-04-09编辑:脚本学堂
有关sql分页查询语句的三种实现方法,三种分页代码各有不同,第一种方法效率最佳,不建议用游标实现分页查询,性能不好,一起来学习下吧。

sql分页查询代码

表结构:
 

create table page(
 id int identity(1, 1) primary key,
 filed1 varchar(11) not null,
 filed2 varchar(11) not null
)

第一种方法,不过对表有要求:表必须有主键(下面语句展示是查询1000到10500条数据)
1)

复制代码 代码示例:
select top 500 * from page
where id not in
(
select top 10000 id
from page
order by id
) order by id
 

2)

复制代码 代码示例:
select top 500 * from page
where id>
(
select max(id)
from
(
select top 10000 id
from page
order by id
) a
) order by id

第二种方法,这个生oracle中的方法类似,利用了函数row_number()
 

复制代码 代码示例:
select * from
(
select ROW_NUMBER() over(order by id desc) rownum, * 
from page
) a
where rownum>10000 and rownum<10501

第三种方法,利用游标存储过程分页
 

复制代码 代码示例:
create procedure paging
 @sqlstr nvarchar(4000), --查询字符串
 @currentpage int, --第N页
 @pagesize int --每页行数
 as
 set nocount on
 declare
 @P1 int,
 @rowcount int
 exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,
 @rowcount=@rowcount output
 select ceiling(1.0*@rowcount/@pagesize) as 总页数
 set @currentpage=(@currentpage-1)*@pagesize+1
 exec sp_cursorfetch @P1,16,@currentpage,@pagesize
 exec sp_cursorclose @P1
 set nocount off
 
exec SqlPage N'select * from page', 21, 500

第二种方法的效率最佳,其次为第一种方法,第三种方法次之。