日期:2014-05-18  浏览次数:20586 次

大家还又什么好的分页方法或者思路,讨教讨教。
我现在所知道的分页方法有三种,各有优缺点:

一、最好的当然是存储过程了,优点:速度快,大数据量时表现优越。 缺点:现在很多企业不会为了一个网站去买服务器,只是租用空间,这样的话,空间商是不给你写存储过程的。

二、最长用的,先读出符合条件的总数,然后计算页数,用TOP ID NOT IN的方法实现。 优点:可以说是通用的方法 缺点:数据量很大的时候,就很麻烦了

三、自己计算ID号,然后按照页数来自己计算要读取的ID号 优点:速度是快 缺点:不灵活,都要自己计算,而且如果有条件的查询的话,几乎是不可能实现的


大家来讨论一下,还有什么更好的分页方法或者思路?不要跟我说用GRIDVIEW控件,要是我想用的话,我就不用来这里讨论了。

------解决方案--------------------
实现的方法并不重要,重要的是你选择什么途径分页.

如果是空间租用和远程共用数据库类型的网站.那么分页的最好方式是选择最合适的空间复用度和时间复用度.

即,既不太频繁的访问数据库,又不一次性取出过多的数据.选择一个择中的方案,一次性取出2页数据,当翻到第二页时异步读

取下一页的数据,那么就在时间复用上有了沉余.

碰到这种问题的时候需要一个性能测试.一般的数据库都有这样的测试计算.比如执行一条sql语句需要的时间.

在最合理的用户可以忍受的时间里做出响应是最好的选择.
------解决方案--------------------
学习
------解决方案--------------------
http://www.531.hk/article.asp?id=201
------解决方案--------------------
感觉第二个方法还可以啊,数据量大的时候也不是特别慢
------解决方案--------------------
学习
------解决方案--------------------
sqlserver2005的rownumber(),这个就可以
------解决方案--------------------
我一般的思路是这样的(不用not in)
如果用SQL实现分页
比如 :每页显示10条记录 当你想取 第2页时
思路是:
先取出TOP 20,然后倒序,再取TOP 10 ,就是你要的第2页的记录了.不知道性能上是不是比用NOT IN效率高点
以上是我的思路,希望有高手可以批评改正。
------解决方案--------------------
见老帖。
------解决方案--------------------
探讨
引用:
sqlserver2005的rownumber(),这个就可以


我还没用倒2005,我还是在用2000哦~~

------解决方案--------------------
TOP关键字 不是所有的数据库都支持的,
一般如果你用的SQL2005以上的,基本有ROWNUMBER()方法可以使用.

当然如果你的数据量很小,只是普通的小网站,Gridview显示数据
我推荐用SqlDataSource自带的分页,那个非常简单,而且适合初
学者,至于如果你要写DATALIST的分页,推荐用存储过程吧,直接在数据
层分页.

create proc Paging
(
@beginid int,
@endid int
)
as
Declare @News table 
(
RowNumber int,
NewsId int,
Did int,
NewsName varchar(100),
[Time] varchar(40),
Author varchar(20),
ClickTime int,
NewsDetails varchar(6000),
NewsPictureUrl varchar(60),
Oid int default(0)
)
insert into @news
select Row_Number() over (order by news.newsid),
NewsId,Did,NewsName,[Time],Author,ClickTime,NewsDetails,
NewsPictureUrl,Oid from news where did=1
select rownumber,newsid,Time, case when len(newsname)<18 then newsname else substring(newsname,0,18)+'...' end as newsname from @news where RowNumber>=@beginid and RowNumber<=@endid
------解决方案--------------------
商量下,不行那就换一家吧
------解决方案--------------------
http://www.svnhost.cn/Download/Detail-147.shtml//一起交流一下,昨天上午写的(用户控件)



这几天写了一个自定义控件(把aspnetPager 改写了),成熟了就传上来。