40W的SQL数据,ASP中如何快速分页?

241219 2008-04-03 11:00:00
40W的SQL数据,如何快速分页?
...全文
261 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
lifefamily 2008-04-06
  • 打赏
  • 举报
回复
其实没有必要存储过程,如果仅仅40万的话。优化的SQL语句即可。
看看我们的网站
http://www.bioon.com.cn 基本每一个表数据都达到40万左右,速度很快,当然这还不是最优化的。
还有http://www.biodic.cn 120万,模糊查询,速度也很快。

程序的效率是几方面,一是SQL效率的问题,优化语句!二是ADO的效率,不要传输大数据,如查询40000页,只传输第40000页的内容,而不是传输整个4万页的,实现方法有存储过程,当然也可以用SQL语句直接实现,不必存储过程。三是代码效率,ASP差了些,但还行。
sy_binbin 2008-04-04
  • 打赏
  • 举报
回复
要想很好的解决大数据量的分页

临时表,存储过程,索引最好组合起来使用。特别是索引,一个组合索引能达到意想不到的结果。


另外还可以考虑下数据库的表分区。
bwangel 2008-04-04
  • 打赏
  • 举报
回复
关于分页,确实有必要深入讨论,我看了很多存储过程式的,基本就是那种
select top XX * from table where id not in(select top xx id from table)的那种。包括13楼所说的那种。

请大家注意这个not in,它是数据库最大的敌人。当你点击“最后一页”时,就知道not in的厉害了。

而我的方法没有用not in或者in或者exists这类严重影响效率的东东,可以充分利用索引优化,原理也很简单,经过测试,不足之处是一次性内存占用比较多。不过再怎么占用,也比传统的分页要少。
cisky 2008-04-04
  • 打赏
  • 举报
回复
同意楼上,另外,数据太大,建议建游标吧
苍白之月 2008-04-04
  • 打赏
  • 举报
回复
7楼 的办法 基本算不上有效率的分页

现在关于分页也没有一个统一的意见 也就是都说自己的好

基本都是根据个人经验做

做法上面的总结的差不多了
1、存储过程
2、临时表

40万记录 其实你只要加索引 用7楼的办法就可以了

个人比较推崇的是做临时表(当然要考虑记录数更新频率)

举个例子
40万记录 每页20条 就是2万页
有人会一页一页的点吗?
那么大家经常的点无外乎是前10页 也就是说你剩下的19990页就是分出来了也是无用功

再有要说的就是 把功夫下在数据离线 比考虑如何分页效果好的多
windykuang 2008-04-03
  • 打赏
  • 举报
回复
UP
ab520ah 2008-04-03
  • 打赏
  • 举报
回复
顶楼主你一下。
http://qzshi.com
网站建设技术论坛
另外招版主,或合作管理员,有兴趣的加群4228406
bwangel 2008-04-03
  • 打赏
  • 举报
回复
用存储过程是一法,但不便于移植。以下是我写的不用存储过程的代码:


''''通用分页函数,返回页号为Page的记录集''''''
'TableName-表名
'KeyId-排序关键字名
'FieldList-要查询的字段列表
'Cond-条件
'DESC-是否降序
'Page-当前页号
'PSize-页大小
'RCount-记录总数
'Ps -查询要用到的参数数组
FUNCTION RsPage(TableName, KeyID, FieldList, Cond, Desc, Page, PSize, RCount,Ps)
Dim boundID,Descs,MaxMinKeyID, GtLt,pcnt
if Desc then
Descs="ORDER BY " + KeyID +" DESC"
MaxMinKeyID = "MIN("+KeyID+")"
GtLt = "<"
else
Descs="ORDER BY " + KeyID
MaxMinKeyID = "MAX("+KeyID+")"
GtLt = ">"
end if

Sql = "SELECT COUNT("+KeyID+") FROM "+TableName+" WHERE "+ Cond
RCount = ExecInt(sql,Ps)
pcnt = (RCount-1) \ PSize + 1
if Page<1 then Page=1
if Page>Pcnt then page=Pcnt
sql = "SELECT "+MaxMinKeyID+" FROM (SELECT TOP "& (Page-1)*PSize & " " & KeyID &" FROM "+TableName+" WHERE ("+Cond+ ")"+DESCs + ") " & Left(KeyID,1)
boundID=ExecStr(sql,Ps)
if boundID = "" then GtLt="<>"
sql = "SELECT Top "&PSize & " " & FieldList & " FROM " & TableName &" WHERE (" & KeyID & GtLt &"'"& boundID & "') and (" & Cond & ")" & Descs
set RsPage=ExecRs(sql,Ps)
End Function
Atai-Lu 2008-04-03
  • 打赏
  • 举报
回复

CREATE PROCEDURE [dbo].[pGetMesList]
@pagesize int,
@pageindex int
AS
DECLARE @strSQL varchar(5000)

--准备分页
declare @maxpage int --总页数
declare @datacount int --总数据条数
--set @maxpage=0
set @datacount=(select count(ID) from [pmessage])
if(@datacount%@pagesize)=0
begin
set @maxpage=(@datacount/@pagesize)
end
else
begin
set @maxpage=(@datacount/@pagesize)+1
end
--开始分页
IF @pageindex = 1
begin
SET @strSQL = 'select top '+str(@pagesize)+' '+str(@datacount)+' as datacount,'+str(@maxpage)+' as maxpage, * from [pmessage]
order by [ID] desc'
end

else
begin
SET @strSQL = 'select top '+str(@pagesize)+' '+str(@datacount)+' as datacount,'+str(@maxpage)+' as maxpage, * from [pmessage]
where ([ID] not in (select top '+str((@pageindex-1)*@pagesize)+' [ID] from [pmessage] order by [ID] desc))
order by [ID] desc'
end
EXEC(@strSQL)
GO

241219 2008-04-03
  • 打赏
  • 举报
回复
有无哪位发个例子来呢?
  • 打赏
  • 举报
回复
SQL的一般都使用存储过程分页
siyee 2008-04-03
  • 打赏
  • 举报
回复
存储过程
网上去搜一个
以前有,忘掉放哪里了
不好意思
xiaojing7 2008-04-03
  • 打赏
  • 举报
回复
分页可以客户端页可以存储过程来分
40W的可以用存储过程来实现
或者用临时表来实现,
Atai-Lu 2008-04-03
  • 打赏
  • 举报
回复
用存储过程分页
gingerkang 2008-04-03
  • 打赏
  • 举报
回复
建好索引,只取本页数据,只取需要字段,缓存总数
知道的只有这些了.
wcplym 2008-04-03
  • 打赏
  • 举报
回复
你算找对人了:
一个非常好且经过优化测试的分页存储过程(1)
http://www.wcplym.com/techArticleDetail.asp?id=27&
一个非常好且经过优化测试的分页存储过程(2)
http://www.wcplym.com/techArticleDetail.asp?id=39
mafengcf 2008-04-03
  • 打赏
  • 举报
回复
bwangel测试速度可以
暴走的车轮 2008-04-03
  • 打赏
  • 举报
回复
四裤全输的代码是不错~~~~
bwangel 2008-04-03
  • 打赏
  • 举报
回复
为了"推销"自己的代码,我来发个测试页:
http://keke100.vicp.net/
内有100万条记录。各位可以测试一下速度。当然因为我是用ADSL+自己的机子+花生壳作测试,请大家考虑一下网速。

28,391

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧