网站建设资讯

NEWS

网站建设资讯

sqlserver中分页,sql分页的几种方式

sql server 求和后如何分页?请看SQL语句

四种方式实现SQLServer

创新互联公司长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为岢岚企业提供专业的成都网站制作、网站建设,岢岚网站改版等技术服务。拥有十多年丰富建站经验和众多成功案例,为您定制开发。

分页查询

SQLServer

的数据分页:

假设现在有这样的一张表:

CREATE

TABLE

test

(

id

int

primary

key

not

null

identity,

names

varchar(20)

)

然后向里面插入大约1000条数据,进行分页测试

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

--10代表分页的大小

select

top

10

*

from

test

where

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条元素

第二种方法:

还是以上面的结果为例,采用另外的一种方法

--数据的意思和上面提及的一样

select

top

10

*

from

test

where

id

(

select

isnull(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类型的。

第三种方法:

select

top

10

*

from

(

select

row_number()

over(order

by

id)

as

rownumber,*

from

test

)

A

where

rownumber

40

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

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

第四种:

存储过程查询

创建存储过程

alter

procedure

pageDemo

@pageSize

int,

@page

int

AS

declare

@temp

int

set

@temp=@pageSize*(@page

-

1)

begin

select

top

(select

@pageSize)

*

from

test

where

id

not

in

(select

top

(select

@temp)

id

from

test)

order

by

id

end

执行存储过程

exec

10,5

SQL Server两种分页性能比较

SQL Server 在2012版本中 提供了一种新的分页方式 fetch next

相比以前开窗函数来看有什么区别呢? 我用 sql server 系统表产生笛卡尔积 做了一个测试

先来看一下数据量

在翻页数量不大的时候的比较 第20页的时候的比较

1、开窗函数

2、fetch next

可以看出所花费的时间相当接近的,两者都是1.2s

我们把页数增大,再来看看区别 第200000页的时候比较

一个花了3.9s,一个花了1.6s

当随着页数的增加 可以看出 fetch next 分页的性能是优于开窗函数的。

所以当你是使用sql server2012及以上版本的时候,建议还是采用 fetch next 来进行分页吧。

sqlserver中怎么分页查询

假设现在有这样的一张表:

CREATE TABLE test

(

id int primary key not null identity,

names varchar(20)

)

然后向里面插入大约1000条数据,进行分页测试

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

--10代表分页的大小

select top 10 *

from test

where id not in

SQL Server 分页 查询语句

四种方式实现SQLServer 分页查询

SQLServer 的数据分页:

假设现在有这样的一张表:

CREATE TABLE test

(

id int primary key not null identity,

names varchar(20)

)

然后向里面插入大约1000条数据,进行分页测试

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

--10代表分页的大小

select top 10 *

from test

where 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条元素

第二种方法:

还是以上面的结果为例,采用另外的一种方法

--数据的意思和上面提及的一样

select top 10 *

from test

where id

(

select isnull(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类型的。

第三种方法:

select top 10 *

from

(

select row_number() over(order by id) as rownumber,* from test

) A

where rownumber 40

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

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

第四种:

存储过程查询

创建存储过程

alter procedure pageDemo

@pageSize int,

@page int

AS

declare @temp int

set @temp=@pageSize*(@page - 1)

begin

select top (select @pageSize) * from test where id not in (select top (select @temp) id from test) order by id

end

执行存储过程

exec 10,5


标题名称:sqlserver中分页,sql分页的几种方式
文章网址:http://cdweb.net/article/dseecpi.html