数据库数据分页通常需要确定总页数以渲染分页控件。通常,这需要运行两个单独的查询:一个使用COUNT()获取总数,另一个使用LIMIT检索当前页的数据。
这种方法效率低下。幸运的是,在PostgreSQL中有一种更好的方法来获取应用LIMIT之前的总数:使用窗口函数。
PostgreSQL 8.4中引入的窗口函数允许我们对由“窗口”定义的数据集执行计算。通过指定合适的窗口,我们可以检索总数而不会影响LIMIT操作。
考虑以下查询:
<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>
这里,full_count
提供了应用LIMIT之前的总行数。
注意: 以这种方式使用窗口函数可能比传统的两查询方法在计算上更昂贵。这是因为必须计算所有行,而不管分页参数如何。
在某些情况下,无需在LIMIT之前获取总数。一种替代方法是:
以上是在 PostgreSQL 查询中应用 LIMIT 之前如何有效确定总行数?的详细内容。更多信息请关注PHP中文网其他相关文章!