Oracel 分页方式,网上流传的两种方式:
1.select mTabB.* from (select rownum num, mTabA.* from (
+sql+
) mTabA ) mTabB
where mTabB.num <= end and mTabB.num >= start
2.select mTabB.* from (select rownum num, mTabA.* from (
+sql+
) mTabA where rownum <= end ) mTabB
where mTabB.num >= start
简单的描述一下两种分页SQL 的区别:
1.第一种分页方式效率相对于第二种慢。
2.第二种分页原理为:首先oracel 会根据查询条件rownum 将的数据过滤掉,即先坎掉rownum 大于end的数据,然后在剩余的数据里面遍历mTabB.num >= start的数据,这也就是第二种分页效率高于第一种的原因。特别需要注意一点,如果本身的查询语句sql中包含 order by 可能会出现序号混乱的现象,原因是你order by的列值有重复,建议解决:order by + index