我在前面的《浅谈分页》中提到了分页的一般方式, 今天再讲一下物理分页的方式。
物理分页和逻辑分页最大不同在于: 它利用了数据库本身的一些特性来分页,通俗一点的理解就是“利用了SQL语法的优化,提高了分页的性能”。
物理分页不再使用JDBC驱动的ResultSet游标功能, 而依靠程序员对数据库的良好的理解,使用纯SQL语法进行分页。这种方式的示例代码如下(我用的是Oracle数据库)
//查询当前页的记录
String queryCurrentSql=" select b.* from "
+" ("
+" select rownum r,a.* from tbl_fwinfo a where a.userid=? order by a.fwid "
+" ) b"
+" where b.r between ? and ? ";
————对这两种分页方式进行一下总结:
(1)物理分页速度上并不一定快于逻辑分页,逻辑分页速度上也并不一定快于物理分页
(2)物理分页总是优于逻辑分页: 没有必要将属于数据库端的压力加诸到应用端来,就算速度上存在劣势,然而在其他性能上的优点足以弥补这点缺失(如JVM内存使用量,占用CPU时间等)。
(3)需要了解最优的物理分页方式: 各种数据库都有其自身对SQL语句的优化,因此在需要进行分页的工作之前,有必要了解数据库本身的一些SQL语句。