查询分页需要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(*) 。