高效分页需要知道结果总数才能准确显示分页控件。 传统方法涉及两个单独的查询:一个用于计算所有结果,另一个用于获取当前页面的数据。 然而,这种方法可能效率低下。
PostgreSQL 提供了利用窗口函数的卓越解决方案(自版本 8.4 起可用)。 COUNT(*) OVER()
函数允许在单个查询中检索总计数和分页结果:
<code class="language-sql">SELECT foo, COUNT(*) OVER() AS full_count FROM bar WHERE <some condition> ORDER BY <some col> LIMIT <pagesize> OFFSET <offset>;</code>
值得注意的是,这种方法虽然很优雅,但由于完整的行计数计算,可能会影响非常大的表的性能。 仔细考虑性能权衡是必要的。
为了提高大型数据集的性能,请考虑以下替代方案:
GET DIAGNOSTICS
和 pg_num_rows
等客户端函数检索受影响的行数。OFFSET
的查询以提高效率。 这可能涉及索引策略或替代查询结构。以上是如何在不使用多个 SQL 查询的情况下高效获取分页查询中的总结果计数?的详细内容。更多信息请关注PHP中文网其他相关文章!