Oracle 分区表分页查询SQL优化

Oracle 分区表分页查询优化

各位高人, 我有一个按天分区的订单表,每分区约50w:
order{
id varchar(32) ,//订单号
mno varchar(12) //商户号
part // 分区列,取id的前8位日期.
..其它大约20个字段.
}

本地分区唯一索引 ORDER_UK_ID: part+id

后管需要做一个分页查询,每页20条, 按id倒序 , 目前SQL为:
select * from (
select a.*, rownum rn from (
select * from order where part between '20220101' and '20220107' and mno='m1' order by id desc
) a where rownum<100
) b where rownum>80;

经我分析其查询过程是是: Oracle 先把每个分区的数据查出来, 再统一排序,再取前N条. 效率远低于在id上建全局索引.
请问: 怎么让Oracle 从最后一个分区开始查, 如有N条记录满足条件就直接返回呢?

性能不建议一条sql来完成那么多子查询,慢不说,还严重影响其他功能,耗性能,你这是外包的做法啊😄,能单表查询就单表查询,能批量查就批量查,能少查就少查,剩下通过代码层来逻辑计算

先根据条件计算在哪个分区表,直接查分区,而不是全表检索。

1、没用的字段就不要进行查询了
2、rownum<100 和 rownum>80 可以合并在一起进行查询吧,没必要再嵌套一层查询啊!