网页内容分页!

TopHead 2002-01-08 04:44:42
三层结构,数据库(SQL Server)、组件(VB COM+)、页面(ASP),当页面需要查询某项数据时,假设查询结果共有100000行,SQL查询完成所有的100000行内容需要1分钟,我们现在的做法是在组件中分页,也就是说无论页面需要查询哪一页,都是通过数据库得到所有的行,然后在组件中将页面需要的某页内容返回给页面,这样做的结果就是无论查哪一页数据库都需要执行很长时间,不知各位大虾有没有好办法?谢谢各位!
...全文
543 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
TopHead 2002-01-14
  • 打赏
  • 举报
回复
谢谢各位的发言!

难道除了上面各方法外就没有更好的办法吗?苦恼!!!
roader 2002-01-14
  • 打赏
  • 举报
回复
由于是条件选择,当然不能用ID来分割,不用存储过程好象没有好的办法了
但是可以简单的利用TOP来提高效率,比如每页显示50条,第一页就可以用select top 50...,第二页用 select top 100...,依次类推。必须注意,如果直接用select top 50 数据库将不会分页,所以你首先要得到总条数,这个就看你的习惯了
zhu_joe 2002-01-12
  • 打赏
  • 举报
回复
chy018(pillar),想法很独特,我喜欢。
不过,这样一次传到客户端的数据未免太多了,本来是服务器端处理时间长,现在是页面下载时间长。
呵呵,
又不过如果访问量大的话,速度效果就会很明显,何况现在都是宽带了,页面下载时间比服务器处理廉价的多。:)
所以,我赞成这种新想法,但是如果是经典的还是中规中矩的用存储过程好!
发言完毕!
希偌 2002-01-11
  • 打赏
  • 举报
回复
学学,长长见识!!!
chy018 2002-01-11
  • 打赏
  • 举报
回复
实在没有办法了就在一页中读出所有的数据。
在读的过程中用 javascript 分成若干个层。点击其实就是变换显示的层。
这样在查出第一页(也就是第一个层)的时候马上就显示出来了,实际上 asp 还是继续查询,只不过是查出来的都藏在这个层的后面罢了。
Zetty 2002-01-11
  • 打赏
  • 举报
回复
分页算法+地址映射算法
TopHead 2002-01-11
  • 打赏
  • 举报
回复
upppppppppppppp
TopHead 2002-01-11
  • 打赏
  • 举报
回复
lihaitaoami(天鹅)说的对,我现在很多需要显示的内容都是从数据库中经过复杂的操作才取出来的,结果每次翻页的时候又得重新取数,影响系统的速度!

大家踊跃发言啊!
mygia 2002-01-09
  • 打赏
  • 举报
回复
头都大啦!
lihaitaoami 2002-01-09
  • 打赏
  • 举报
回复
如果单纯的显示一个版块的贴子,楼上某位转贴的还可以,速度还是很快的。
但如果是搜索出来的贴子呢?条件比较多了,就要用另外的方法了。
TopHead 2002-01-09
  • 打赏
  • 举报
回复
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TopHead 2002-01-09
  • 打赏
  • 举报
回复
谢谢各位的参与,其实我不想用存储过程的原因是需要显示的页面非常多,现在数据库中有很多视图,这些视图的结果就是需要显示的内容,如果都改成存储过程好像不太现实!
TopHead 2002-01-09
  • 打赏
  • 举报
回复
谢谢tripofdream(梦之旅),但是我们是通过组件访问数据库,当然不能在页面构造SQL!
ChinaOk 2002-01-09
  • 打赏
  • 举报
回复
如果有一个自动编号的字段那就好办了。
tripofdream 2002-01-09
  • 打赏
  • 举报
回复
利用页数构造子查询:
sql="select top 20 * from table where id not in (select top "&(page-1)*20& " id from table)"
不过效率肯定没有存储过程高
longj 2002-01-08
  • 打赏
  • 举报
回复
學習學習

存儲過程也有優點!
TopHead 2002-01-08
  • 打赏
  • 举报
回复
最好不是类似的存储过程,我说过了我不想用存储过程!
wintle 2002-01-08
  • 打赏
  • 举报
回复
看看下面这个如何,其实我已经贴过好几次了。这是我自己系统里的一个过程,为了写这个东东我参考了非常多的分页解决方法:)
将我的log_login表名改成你的view名就好用了。
记得给分哪:)嘻。
------------------------

CREATE PROCEDURE dbo.log_login_get
@page int,
@page_size int
AS
declare @intBeginID int
declare @intEndID int
declare @intMaxCount int
declare @intPageCount int
declare @intRowCount int
declare @intMaxPage int
set nocount on
select @intMaxCount=count(*) from log_login
if(@intMaxCount=0)
return 0
set @intMaxPage=Round((@intMaxCount/@page_size),0)
if(@page-1>@intMaxPage)
select @page=@intMaxPage+1
if(@page<1)
select @page=1
set @intRowCount=(@page-1)*@page_size+1
--print @intRowCount
set rowcount @intRowCount
select @intBeginId=id from log_login order by id desc
--print @intBeginId
select @intRowCount=@page*@page_size
--print @intRowCount
set rowcount @intRowCount
select @intEndId=id from log_login order by id desc
--print @intEndId
set rowcount 0
set nocount off
select * from log_login where id between @intEndId and @intBeginId order by id desc
GO
TopHead 2002-01-08
  • 打赏
  • 举报
回复
balloy() 您转载的文章的方法是不错,但是因为我需要分页的地方很多,需要现实的内容数据库中是视图,我不想将这些视图都改成存储过程!各位大虾还有什么好办法!
TopHead 2002-01-08
  • 打赏
  • 举报
回复
谢谢各位的回答,请大家多多发表自己的见解,因为我想这个是很多人都会碰到的问题,各位大虾不要保守:)
加载更多回复(7)

28,390

社区成员

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

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