首页 >后端开发 >php教程 >如何在应用 LIMIT 之前高效检索 PostgreSQL 中的总结果计数?

如何在应用 LIMIT 之前高效检索 PostgreSQL 中的总结果计数?

DDD
DDD原创
2024-12-13 22:48:11695浏览

How to Efficiently Retrieve Total Result Count in PostgreSQL Before Applying LIMIT?

限制应用之前检索结果计数的最佳方法

在数据库分页中,确定页面总数对于渲染分页控件至关重要。但是,为此目的执行单独的计数和限制查询可能效率很低。本文探讨了一种在不应用数据库限制的情况下获取结果计数的改进技术。

Postgres 窗口函数

PostgreSQL 版本 8.4 及更高版本引入了窗口函数,支持在分区子集上计算聚合函数数据。这使我们能够确定总计数并在单个查询中检索有限的结果。

SELECT foo,
       COUNT(*) OVER() AS full_count
FROM bar
WHERE <some condition>
ORDER BY <some col>
LIMIT <pagesize>
OFFSET <offset>;

但是,此方法可能会产生额外的性能开销,因为它需要计算所有符合条件的行,可能会影响大量的性能表或 OFFSET 值接近总行数。

结果计数的替代选项

在性能受到关注的情况下,替代方案可以采用独立于 OFFSET 和 LIMIT 应用程序的方法来获取受影响行的最终计数。 Postgres 内部簿记跟踪此信息,某些客户端可以访问这些信息。

  • PL/pgSQL:使用 GET DIAGNOSTICS 执行 SQL 命令后检索行计数。
  • PHP:使用 pg_num_rows 函数确定受影响的行数rows.

其他资源

  • [计算受批量查询影响的行数PostgreSQL](https://dba.stackexchange.com/questions/247142/calculate-number-of-rows-affected-by-batch-query-in-postgresql)

以上是如何在应用 LIMIT 之前高效检索 PostgreSQL 中的总结果计数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn