博客
关于我
【SqlServer】解析SqlServer的分页
阅读量:404 次
发布时间:2019-03-05

本文共 1470 字,大约阅读时间需要 4 分钟。

方式1:

  假设页数是10,现在要拿出第5页的内容,查询语句如下:
  --10代表分页的大小

select top 10 *from testwhere id not in( --40是这么计算出来的:10*(5-1) select top 40 id from test order by id)order by id

  原理:需要拿出数据库的第5页,就是40-50条记录。首先拿出数据库中的前40条记录的id值,然后再拿出剩余部分的前10条元素

方式2:
  还是以上面的结果为例,采用另外的一种方法
  --数据的意思和上面提及的一样

select top 10 *from testwhere id >( select is null(max(id),0) from  (   select top 40 id from test order by id  ) A)order by id

   原理:先查询前40条记录,然后获得其最id值,如果id值为null的,那么就返回0,然后查询id值大于前40条记录的最大id值的记录。这个查询有一个条件,就是id必须是int类型的。

 方式3:

select *    from    (        select *,row_number() over(order by id) as rownumber,* from test    ) Awhere rownumber > 40 and  rownumber<=50;

   原理:先把表中的所有数据都按照一个rowNumber进行排序,然后查询rownuber大于40的前十条记录。

  这种方法和oracle中的一种分页方式类似,不过只支持2005版本以上的

 方式4:

  这种方式更加简便,和好理解。

SELECT * FROM TestTable order by id offset 40 ROWS FETCH NEXT 10 ROWS only

 

 

这里对这四种方式做一下分析,

第一种方式在查询的数据量很大的时候,性能会比较差。

第二种方式中,如果id是一个IDENTITY (1,1)类型的数据话,那么上面那种查询语句就可以进行如下优化:

select * from test where id>@page-1 and id<=@page-1+@pageSize

当然最好的情况是给id建立聚集索引,效果最好。如果表中没有这样的字段,那么推荐使用第三种方式。

第三种方式,这种方式首先是通过row_number对查询出来的列进行编号,然后再通过列进行选取数据,如果表非常大的话,那么进行编号的过程将会比较吃力。

第四种方式,这种方式比较好写,从上面可以看出,offset是对id起作用的,所以必须要有 order by id ,或者 order by 其它字段 也可以。

 接下创建一个存储过程:

  存储过程查询   创建存储过程alter procedure pageDemo@pageSize int,@page intASdeclare @temp intset @temp=@pageSize*(@page - 1)begin select top (select @pageSize) * from test where id not in (select top (select @temp) id from test) order by idend

执行存储过程

exec  pageDemo 10,5

 

转载地址:http://cehzz.baihongyu.com/

你可能感兴趣的文章
nacos源码 nacos注册中心1.4.x 源码 nacos源码如何下载 nacos 客户端源码下载地址 nacos discovery下载地址(一)
查看>>
nacos源码 nacos注册中心1.4.x 源码 spring cloud alibaba 的discovery做了什么 nacos客户端是如何启动的(二)
查看>>
Nacos简介、下载与配置持久化到Mysql
查看>>
Nacos简介和控制台服务安装
查看>>
Nacos管理界面详细介绍
查看>>
Nacos编译报错NacosException: endpoint is blank
查看>>
nacos自动刷新配置
查看>>
nacos运行报错问题之一
查看>>
Nacos部署中的一些常见问题汇总
查看>>
NACOS部署,微服务框架之NACOS-单机、集群方式部署
查看>>
Nacos配置Mysql数据库
查看>>
Nacos配置中心中配置文件的创建、微服务读取nacos配置中心
查看>>
Nacos配置中心集群原理及源码分析
查看>>
nacos配置在代码中如何引用
查看>>
nacos配置新增不成功
查看>>
nacos配置自动刷新源码解析
查看>>
nacos集成分布式事务插件Seata的序列化问题,实际上是Seata本身存在bug!!
查看>>
Nacos集群搭建
查看>>
nacos集群搭建
查看>>
nacos集群网络分区对的影响和运维方式
查看>>