這個問題的本質是,如何從一個查詢中返回按某種順序排列的特定位置的數據。
從目前的解決辦法來看,有幾種類型:
1、利用服務器端游標,這個在Web程序中非常不可取。消耗的資源很大,很輕易把服務器搞死。非凡對一些數據量很大的查詢更是如此。分頁只是減少了返回的數據量,但是服務器端還是查詢了所有的數據,還要保持對數據庫的連接,數據庫的資源還是被消耗了。
2、利用嵌套的sql來查詢某一頁的數據。這個辦法可以不用服務器端游標,但是仍然消耗了很多數據庫的資源。非凡是在訪問頁碼比較大的頁面的時候。頁碼越大,消耗資源越多。Hibernate就是用的這種辦法。
3、用緩存查詢的主鍵的辦法來查詢。就是一次查一頁的數據,下次查主鍵大于第一頁的主鍵的辦法來查詢。這個辦法對于順序訪問非常好,速度很快,但是跳頁的時候不適合。而且,要知道查詢結果的總條數,必須select count,有時候,select count也是很耗資源的。微軟的解決方案是推薦這種方法的。
4、折衷組合以上辦法。
其實,微軟的斷開式數據集對于提高服務器性能還是大有好處的。使用java,也可以用同樣的思路,搞一套只用快速只進游標的查詢類庫和斷開連接的數據容器。
要害,還是要做好分頁問題。
更新的效率,其實并不是很重要(當然,數據庫結構要合理),查詢的效率,始終是個大問題。
新聞熱點
疑難解答