All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
SqlServer去除表中的不可见字符_[SQL,Server教程]
关于PHP动态网页session问题的解决方案_php资料_编程技术
从XML文件中读取数据绑定到DropDownList_[Asp.Net教程]
PHP中 ADODB 类库介绍(二)_[PHP教程]
ASP.NET中Multi——ListBox控件编程详解_.net资料_编程技术
使用PagedDataSource类实现DataList和Repeater控件的分页显示_.net资料_编程技术
microsoft sql server (mssql)数据导入导出详解 (多图文档)_[SQL Server教程]
SQL,Prompt:SQL智能完成工具_[SQL,Server教程]
PHP学习宝典-第二章 (续篇)_[PHP教程]
结合AJAX的PHP开发之后退、前进和刷新_php资料_编程技术
Reading number is top 10 pictures
Forced sex girl living abroad1
NeedWallpaper8
The wise woman of chest1
谁认识这位校花
美女浴室写真2
Flow chart of breast implants
Average female college students1
鸡蛋的新玩法
恶搞漫画1
运动的范冰冰3
Download software ranking
WebService在.NET中的实战应用教学视频 → 第4集
Sora aoi‘s film--Lust fan wall
linux初级教程
Unix video tutorial6
jdk1.5
Unix video tutorial7
Wild things 2
网页特效实例大全
株洲本地在线棋牌游戏
Professional killers2 data package
归海一刀 published in(发表于) 2014/2/3 6:35:30 Edit(编辑)
SQL Server 存储过程的分页方案比拼_[SQL Server教程]

SQL Server 存储过程的分页方案比拼_[SQL Server教程]

SQL Server 存储过程的分页方案比拼_[SQL Server教程]

建立表:
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 In和SELECT 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 In和SELECT TOP分页) 效率次之,需要拼接SQL语句
分页方案三:(利用SQL的游标存储过程分页) 效率最差,但是最为通用


来源:网络







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.