作者seagal (待救的小米)
看板C_Sharp
标题Re: [问题] 在ASP.NET 2.0上面 如何实作paging
时间Sun Nov 7 18:23:23 2004
※ 引述《tomex (tomex_ou)》之铭言:
: ※ 引述《seagal (待救的小米)》之铭言:
: : 就例如一个从资料库取出的表格
: : 内容有一百万笔
: : 而我一次只秀10笔
: : 如何做到翻页的功能
: : 例如使用MS SQL TOP指令
: : 但这资料量一多效能就很差了
我贴上一段TOP的选法
curpage=Integer.parseInt(request.getParameter("page"));//显示的页
ResultSet rs=cn.rsexecuteQuery("select top "+page_record+" * from tablename where id not in (select top "+(curpage*page_record)+" id from tablename order by id desc) order by id desc");
我们可以发现他事实上是做两次select
先选出小集合 再把大集合减掉小集合
就是你要的那个page的资料
万一table里又没主索引键 那就更惨了 效能应该会很差
详细的讨论可以参考javaworld
http://www.javaworld.com.tw/jute/post/view?bid=6&id=12796&sty=1&tpg=1&age=-1
ASP.NET 2.0难道没更好的解法吗?
用上面的解法
感觉跟弄出一个DataSet再翻页
要写差不多的码
其实我对效能不会很在意啦
2.0有专门在讲ADO.NET 2.0 cache的技术
我都没去看 哈 少写一些程式码我比较关心:)
: 我以为也对翻页时的效能作过分析,觉得每次只看一页的资料量
: 却每次都会databind()整个sql指令资料量,很浪费效能
: 就花时间去研究怎麽计算存取的笔数,让它最适合效能。
: 但翻页的button因为资料量少了,也就没显示...
: 後来我同事跟我说,web page本来每页翻新就要databin()一次
: 超连结是方便的,但却无法保留变数值,所以重bind()是必要,也免不了!
: 况且db针对上次sql的内容其实有cache在记忆体
: 再重捞一次,其实对效能不会浪费更多!
: 这时候我才释怀,只要效能不差,就没必须花时间计算捞取的range笔数
: 况且万一是多人使用的,资料变动很厉害,我们用心计算的range值可能会造成miss
: so... 还是先不要担心效能问题,以後面对瓶颈时,应该放重心在sql的写法
: 让资料量更少。
--
生物资讯研究室:每天都会更新文件,提供生物资讯教学
http://www.bioinformatic.idv.tw
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.73.177