Re: [問題] 在ASP.NET 2.0上面 如何實作paging
※ 引述《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
討論串 (同標題文章)
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章