mysql、oracle自动分页

查询分页需要2个sql,一个是取得分页数据, 另一个是获取总条数

参数传递为:page,pageSize,sql

mysql分页

分页 sql 通过自动拼接 limit m, n 得到。

原sql limit m,n

总数 sql 通过套一层 select count(*) total from ( 原sql ) as temp_count ;即可得到。

select count(*) total from (原sql) as temp_count

对数据量极大的情况下性能未优化,但好在通用,小项目足矣。

在sql的优化中,对总数sql可以尝试智能解析sql,比如检测是否存在order by以及能否去除,这样可以加快count速度,总之是对sql的各种自动检测。

oracle分页

原理和mysql分页几乎是一致的,就是没有limit这么简单,稍微复杂一点点

SELECT * FROM ( 
 SELECT TMP_PAGE.*, ROWNUM PAGEHELPER_ROW_ID FROM ( 

原sql

 ) TMP_PAGE)
 WHERE PAGEHELPER_ROW_ID <= ? AND PAGEHELPER_ROW_ID > ?

而总数sql 和 mysql 总数实现是一致的,都通过套上 count(*) 。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注