问题:在排查 OceanBase 的分页查询慢 SQL 时,经常遇到因 ORDER BY DESC 导致 CPU 飙升的情况。当业务必须按时间戳降序分页,且当前版本索引不支持降序排列时,应如何通过改写 SQL 来避免昂贵的内存排序(SORT)操作?

问题:在排查 OceanBase 的分页查询慢 SQL 时,经常遇到因 ORDER BY DESC 导致 CPU 飙升的情况。当业务必须按时间戳降序分页,且当前版本索引不支持降序排列时,应如何通过改写 SQL 来避免昂贵的内存排序(SORT)操作?

可以通过修改 ORDER BY 的排序字段来利用索引的有序性。由于 OceanBase 的索引默认是升序(ASC)排列的,如果直接对非索引前缀的时间戳进行降序排序,会触发大量数据在内存中的排序操作。优化方案是将排序字段修改为包含主键或索引前缀的组合字段(例如 ORDER BY 分区键 DESC, 时间戳 DESC ),利用隐藏主键或索引的升序特性配合 TOP-N SORT 算子,从而大幅降低 CPU 开销并提升 TPS