SpringBoot + 分页查询深度优化:OFFSET 100 万太慢?基于游标+时间戳毫秒响应
一、分页查询的痛点 上周,一位做数据分析的朋友向我抱怨:他们的系统在处理大量数据时,分页查询变得越来越慢。"我们有一张包含 1000 万条记录的用户表,"他说,"当翻到第 100 页时,响应时间超过了 5 秒,用户体验极差。" 我帮他检查了一下代码,发现他们使用的是传统的 LIMIT OFFSET 分页方式: SELECT * FROM user ORDER BY id DESC LIMIT 10 OFFSET 1000000; 这种查询方式在数据量较大时,会有严重的性能问题。因为 MySQL 需要先跳过 OFFSET 指定的行数,然后再返回 LIMIT 指定的行数。当 OFFSET 达到 100 万时,MySQL 需要扫描 1000010 行数据,然后只返回 10 行,效率非常低。 二、传统分页方案的局限性 为了实现分页查询,我们通常会使用以下方案: 1. LIMIT OFFSET 分页 SELECT * FROM table ORDER BY id DESC LIMIT 10 OFFSET 1000000; 这种方案的问题: 性能差:随着 OFFSET 的增大,查询时间线性增....