首页 >后端开发 >php教程 >在 PostgreSQL 中应用 LIMIT 之前如何有效获取总行数?

在 PostgreSQL 中应用 LIMIT 之前如何有效获取总行数?

Patricia Arquette
Patricia Arquette原创
2024-12-19 02:22:11423浏览

How to Efficiently Get Total Row Count Before Applying LIMIT in PostgreSQL?

应用 LIMIT 之前确定结果数的最佳方法

在数据库查询中,在应用 LIMIT 之前确定结果总数对于分页至关重要。目前,一种常见的方法涉及运行查询两次:一次对所有结果进行计数,再次进行限制以检索所需的页面。然而,这种方法效率较低。

幸运的是,PostgreSQL 8.4 引入了更高效的解决方案:窗口函数。通过使用窗口函数,您可以在单个查询中检索总结果计数和有限结果。

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

请注意,虽然此方法提供了所需的信息,但它的计算成本可能很高,因为所有即使行将被 LIMIT 排除,也必须对其进行处理。

SELECT 查询中的事件序列

理解序列SELECT 查询中的事件可以帮助理解窗口函数的操作方式。 Postgres 中的操作顺序如下:

  1. 根据 WHERE 子句过滤行
  2. 应用窗口函数
  3. 根据 ORDER BY 对结果进行排序
  4. 根据 LIMIT 和限制结果OFFSET

计数检索的替代方法

除了窗口函数之外,还有其他方法来检索受影响的行计数:

  • plpgsql:获取诊断integer_var = ROW_COUNT;
  • PHP: pg_num_rows

这些方法提供受查询影响的行数,而不是 LIMIT 应用之前的完整计数。

相关资源:

  • [优化查询大表上的OFFSET](https://dba.stackexchange.com/questions/128089/optimize-query-with-offset-on-large-table)
  • [计算受批量查询影响的行数PostgreSQL](https://stackoverflow.com/questions/4644316/calculate-number-of-rows-affected-by-batch-query-in-postgresql)

以上是在 PostgreSQL 中应用 LIMIT 之前如何有效获取总行数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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