几种SqlServer数据库分页方式

转载 2006年05月21日 15:43:00

建立表:

CREATE TABLE [TestTable] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO



插入数据:(2万条,用更多的数据测试会明显一些)
SET IDENTITY_INSERT TestTable ON

declare @i int
set @i=1
while @i<=20000
begin
insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, ''FirstName_XXX'',''LastName_XXX'',''Country_XXX'',''Note_XXX'')
set @i=@i+1
end

SET IDENTITY_INSERT TestTable OFF



-------------------------------------

分页方案一:(利用Not InSELECT TOP分页)
语句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP 20 id
FROM TestTable
ORDER BY id))
ORDER BY ID


SELECT TOP
页大小 *
FROM TestTable
WHERE (ID NOT IN
(SELECT TOP
页大小*页数 id
FROM

ORDER BY id))
ORDER BY ID

-------------------------------------

分页方案二:(利用ID大于多少和SELECT TOP分页)
语句形式:
SELECT TOP 10 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP 20 id
FROM TestTable
ORDER BY id) AS T))
ORDER BY ID


SELECT TOP
页大小 *
FROM TestTable
WHERE (ID >
(SELECT MAX(id)
FROM (SELECT TOP
页大小*页数 id
FROM

ORDER BY id) AS T))
ORDER BY ID


-------------------------------------

分页方案三:(利用SQL的游标存储过程分页)
create procedure XiaoZhengGe
@sqlstr nvarchar(4000), --
查询字符串
@currentpage int, --
N
@pagesize int --
每页行数
as
set nocount on
declare @P1 int, --P1
是游标的id
@rowcount int
exec sp_cursoropen @P1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output
select ceiling(1.0*@rowcount/@pagesize) as
总页数--,@rowcount as 总行数,@currentpage as 当前页
set @currentpage=(@currentpage-1)*@pagesize+1
exec sp_cursorfetch @P1,16,@currentpage,@pagesize
exec sp_cursorclose @P1
set nocount off

其它的方案:如果没有主键,可以用临时表,也可以用方案三做,但是效率会低。
建议优化的时候,加上主键和索引,查询效率会提高。

通过SQL 查询分析器,显示比较:我的结论是:
分页方案二:(利用ID大于多少和SELECT TOP分页)效率最高,需要拼接SQL语句
分页方案一:(利用Not InSELECT TOP分页) 效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用

在实际情况中,要具体分析。

几种常用的分页技术

一.逻辑分页 1.逻辑分页的第一种方式,利用ResultSet的滚动分页。步骤如下:  a.根据条件sql查询数据库。  b.得到ResultSet的结果集,由于ResultSet带有游标,因此可以使...
  • qq_34734520
  • qq_34734520
  • 2016年08月11日 12:59
  • 1182

数据库分页方法总结

在做Java Web项目的时候,项目经常要求能够兼容各种主流数据库,
  • zht666
  • zht666
  • 2014年06月08日 15:59
  • 2311

sqlserver 数据库分页

http://www.cnblogs.com/feiyunfei/archive/2008/02/24/1079697.html回头来开发asp.net程序,难免会遇到数据库分页的问题,回忆一下以前用...
  • feiyunfei
  • feiyunfei
  • 2008年02月24日 22:49
  • 199

SqlServer数据库分页

TOP分页--存储过程page_proc,参数pageSiez是每页显示数目,pageIndex显示第几页 create proc page_proc @pageSize int,@pageInde...
  • sinat_25295611
  • sinat_25295611
  • 2016年11月02日 22:16
  • 103

sqlserver 几种备份方式

SQL备份与还原经典文档 ====================================================================== SQL备份 =======...
  • lanyuzhen
  • lanyuzhen
  • 2012年05月30日 19:35
  • 2228

数据库分页实现方式

  不同数据库分页 收藏  ORACLE分页====...
  • ldongwei
  • ldongwei
  • 2010年04月16日 10:20
  • 272

JSP分页 sqlserver数据库 超详细

DAO 层 package DAO; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql....
  • u014535678
  • u014535678
  • 2015年01月08日 23:45
  • 712

三种数据库sql分页查询

关于sql分页 今天用到分页了顺便就总结了一下 mysql 数据库: mysql 中有分页的关键字limit,它可以实现分页很简单; SELECT * FROM sys_user ORDER BY u...
  • luowangcao
  • luowangcao
  • 2013年12月04日 14:19
  • 1203

常见的分页实现方式(Java)

使用List接口中sublist(int startIndex, int endIndex)方法实现分页 – (包含startIndex,不包含 endIndex) 直接使用数据库SQL语句实现分页...
  • IDog149tao
  • IDog149tao
  • 2017年04月23日 22:54
  • 463

数据库 分页优化的四种方式

很久以前读了一篇关于分页的文章,后来越想越有道理,最近又重新找出来,并做了翻译,原文参考:Four ways to optimize paginated displays.翻译背景:在大数据量的情况下...
  • qilixiang012
  • qilixiang012
  • 2015年06月04日 20:51
  • 1639
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:几种SqlServer数据库分页方式
举报原因:
原因补充:

(最多只允许输入30个字)