老聲常談,分頁查詢的實現就是不分頁
分頁查詢是經常遇到的問題,幾乎每個專案都會遇到,如此常見的問題,我們的資料庫卻沒有提供現成的解決方法,例如Oracle提供Rownum欄位,SQLServer提供TOP關鍵字,MySQL提供Limit關鍵字。Hibernate作為常用的ORM方案,也沒提供一個類似pageQuery之類的方法。他們都提供了分頁查詢的途徑卻沒有提供分頁查詢的直接實現。為什麼呢。
其實無論是TOP還是setMaxResults,都不是用於分頁查詢的,他們的目的在於透過限制抓取數量來提高查詢效能,Rownum也是如此,這就是為什麼Rownum在OrderBy之後就亂的原因(Oracle完全有能力讓它OrderBy之後仍然有序)。那麼我們怎麼還要分頁查詢呢?無非是兩個原因,其一是提高效能,其二是方便使用者使用――沒有哪個使用者會關心1000行之外的資料。
這樣就簡單了,我們不必費心如何高效而優雅的從資料庫中抓取某一頁資料,而是在查詢出所有資料(在maxResults限制下)之後,在記憶體中分頁。例如,List getUsers()獲取前1000個使用者――對於企業應用,這已經很多了――在返回的List中作分頁,即高效又簡單,而且如果加入快取機制之後,就不必每次翻頁都重新查詢了。
下面是示意類圖:
其實無論是TOP還是setMaxResults,都不是用於分頁查詢的,他們的目的在於透過限制抓取數量來提高查詢效能,Rownum也是如此,這就是為什麼Rownum在OrderBy之後就亂的原因(Oracle完全有能力讓它OrderBy之後仍然有序)。那麼我們怎麼還要分頁查詢呢?無非是兩個原因,其一是提高效能,其二是方便使用者使用――沒有哪個使用者會關心1000行之外的資料。
這樣就簡單了,我們不必費心如何高效而優雅的從資料庫中抓取某一頁資料,而是在查詢出所有資料(在maxResults限制下)之後,在記憶體中分頁。例如,List getUsers()獲取前1000個使用者――對於企業應用,這已經很多了――在返回的List中作分頁,即高效又簡單,而且如果加入快取機制之後,就不必每次翻頁都重新查詢了。
下面是示意類圖:
相關文章
- indexdb實現分頁查詢Index
- MYSQL SQLServer分頁查詢的實現MySqlServer
- Hibernate實現分頁查詢的原理
- c# winform 實現分頁查詢C#ORM
- SSM框架實現分頁查詢例子SSM框架
- 如何優雅地實現分頁查詢
- MySQL的分頁查詢MySql
- Oracle的分頁查詢Oracle
- Lucene的分頁查詢
- SSH整合實現分頁查詢(兩種方式)
- Elasticsearch 分頁查詢Elasticsearch
- ssh 分頁查詢
- oracle分頁查詢Oracle
- 大家談談struts的分頁實現吧
- SpringMVC+Spring Data JPA +Bootstrap 分頁實現和模糊查詢分頁SpringMVCboot
- golang通過mysql語句實現分頁查詢GolangMySql
- golang透過mysql語句實現分頁查詢GolangMySql
- hibernate 通用分頁,查詢分頁的泛型類泛型
- ThinkPhp框架:分頁查詢PHP框架
- 分頁查詢優化優化
- NET 集合分頁查詢
- MySQL 多表查詢分頁MySql
- 分頁查詢重構
- Oracle分頁查詢格式Oracle
- 分庫分表後的分頁查詢
- php原聲實現分頁程式碼示例PHP
- 如果走框架在同一頁面裡實現多個列表的分頁查詢框架
- SSH框架下的分頁查詢框架
- ssh框架中的分頁查詢框架
- 分頁查詢的排序問題排序
- JSP怎樣將查詢的資料實現分頁操作JS
- AntDesignBlazor示例——分頁查詢Blazor
- MySQL分頁查詢優化MySql優化
- Oracle分頁查詢格式(十三)Oracle
- Oracle分頁查詢格式(十二)Oracle
- Oracle分頁查詢格式(十一)Oracle
- Oracle分頁查詢格式(八)Oracle
- Oracle分頁查詢格式(九)Oracle