原创

关于mysql分页查询使用limit还是limit offset的小记

1. 分页逻辑简洁

使用 OFFSET 可以使分页逻辑更加直观。OFFSET 指定的是跳过多少行数据,而 LIMIT 则限制返回多少行数据。它们结合在一起的使用非常适合分页操作:

sql

SELECT * FROM table_name LIMIT #{pageSize} OFFSET #{offset};

这样,开发者可以明确地看到分页的逻辑:跳过 offset 行,从 offset + 1 行开始,返回 pageSize 行。对分页参数的计算更加清晰。

2. 更符合 SQL 标准

使用 LIMITOFFSET 的组合是 SQL 标准的一部分,这种模式在许多数据库系统中(如 PostgreSQL、MySQL、SQLite 等)都有广泛支持,尤其是在处理分页场景时,这种写法是标准化的,更具可读性。

3. 灵活跳过数据行

OFFSET 允许你直接跳过前面的一定数量的行,并从指定的行开始读取数据。例如,当你需要从第 50 行开始读取 10 条记录时,可以这样写:

sql

SELECT * FROM table_name LIMIT 10 OFFSET 50;

使用 OFFSET 能更灵活地选择分页的起始位置,而无需再手动计算需要从哪一行开始查询。比如:

sql

SELECT * FROM table_name LIMIT 10 OFFSET 100;

上述查询跳过前 100 行,从第 101 行开始获取 10 条记录。

4. 避免复杂的参数计算

使用 LIMIT start, size 的模式,分页逻辑会依赖于手动计算 start,即 (pageNo - 1) * pageSize。这种模式容易出错,尤其是当你有多个分页逻辑时。使用 OFFSET 可以让 SQL 自带的分页机制来处理这些复杂的参数计算,代码也会更加简洁。

5. 支持复杂查询

在复杂查询中,OFFSETLIMIT 的结合更易于处理。特别是当你使用 ORDER BYGROUP BY 等复杂的查询时,OFFSET 可以帮助你简化分页计算。对比起纯 LIMIT 的形式,OFFSET 更适合这种场景。

6. 数据库优化支持

许多数据库优化器在处理分页时,对 OFFSETLIMIT 有专门的优化路径。它们可以避免在复杂查询中重复扫描已跳过的数据,从而提高性能。虽然对于特别大的数据集,分页查询的性能问题仍然存在,但合理使用 OFFSET 可以在性能和简洁性之间找到一个平衡点。

正文到此结束