1.物理分頁
物理分頁就是數據庫本身提供了分頁方式,如MySQL的limit,oracle的rownum ,好處是效率高,不好的地方就是不同數據庫有不同的搞法。
2.邏輯分頁
邏輯分頁利用游標分頁,好處是所有數據庫都統一,壞處就是效率低。
3.常用ORM框架采用的分頁技術
①:hibernate采用的是物理分頁;
②:MyBatis使用RowBounds實現的分頁是邏輯分頁,也就是先把數據記錄全部查詢出來,然在再根據offset和limit截斷記錄返回(數據量大的時候會造成內存溢出),不過可以用插件或其他方式能達到物理分頁效果。
mybatis的物理分頁插件:
常見的兩種: Mybatis-Paginator Mybatis-PageHelper
為了在數據庫層面上實現物理分頁,又不改變原來MyBatis的函數邏輯,可以編寫plugin截獲MyBatis Executor的statementhandler,重寫SQL來執行查詢
分頁結論:
1.物理分頁速度上並不一定快於邏輯分頁,邏輯分頁速度上也並不一定快於物理分頁。
2.物理分頁總是優於邏輯分頁:沒有必要將屬於數據庫端的壓力加諸到應用端來,就算速度上存在優勢,然而其它性能上的優點足以彌補這個缺點。
3.在分頁工作前,有必要了解使用數據庫本身的一些sql語句特點更好的分頁