在应用 LIMIT 之前获取结果计数的最佳方法

2023-12-09

当对来自数据库的数据进行分页时,您需要知道将有多少页来呈现页面跳转控件。

目前我通过运行查询两次来做到这一点,一次包装在count()确定总结果,第二次应用限制以仅返回当前页面所需的结果。

这看起来效率很低。有没有更好的方法来确定之前会返回多少结果LIMIT被应用?

我正在使用 PHP 和 Postgres。


Pure SQL

自 2008 年以来情况发生了变化。您可以使用窗函数得到完整的计数and一次查询的结果有限。介绍与2009 年 PostgreSQL 8.4.

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

请注意,这可能比没有总数的情况下贵得多。必须对所有行进行计数,并且仅从匹配索引中获取顶部行的可能快捷方式可能不再有帮助。
对于小桌子或小桌子来说并不重要full_count <= OFFSET + LIMIT。对于更大的事情来说full_count.

角箱: when OFFSET至少与基本查询的行数一样大,no row被返回。所以你也得不到full_count。可能的替代方案:

  • 使用 LIMIT/OFFSET 运行查询并获取总行数

事件的顺序SELECT query

( 0. CTE 是单独评估和具体化的。在 Postgres 12 或更高版本中,规划者可以在开始工作之前内联子查询之类的内容。)这里不。

  1. WHERE条款(和JOIN条件(尽管您的示例中没有)从基表中过滤符合条件的行。其余的基于过滤后的子集。

( 2. GROUP BY聚合函数将放在这里。)不在这里。

( 3. 其他SELECT列表表达式是根据分组/聚合列求值的。)这里不。

  1. 窗口函数的应用取决于OVER子句和函数的框架规范。简单的count(*) OVER()基于所有符合条件的行。

  2. ORDER BY

( 6. DISTINCT or DISTINCT ON会去这里。)不在这里。

  1. LIMIT / OFFSET根据既定顺序应用以选择要返回的行。

LIMIT / OFFSET随着表中行数的增加,效率变得越来越低。如果您需要更好的性能,请考虑替代方法:

  • 在大表上使用 OFFSET 优化查询

获得最终计数的替代方案

有完全不同的方法来获取受影响的行数(not之前的完整计数OFFSET & LIMIT被应用)。 Postgres 有内部簿记有多少行受到最后一个 SQL 命令的影响。某些客户端可以访问该信息或自行计算行数(例如 psql)。

例如,您可以检索受影响的行数plpgsql执行 SQL 命令后立即:

GET DIAGNOSTICS integer_var = ROW_COUNT;

手册中有详细说明。

或者你可以使用pg_num_rows in PHP。或者其他客户端中的类似功能。

Related:

  • 计算PostgreSQL中批量查询影响的行数
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在应用 LIMIT 之前获取结果计数的最佳方法 的相关文章

  • 检查 PHP 中“@”字符后面的单词

    我现在正在制作一个新闻和评论系统 但是我已经在一个部分上停留了一段时间了 我希望用户能够在 Twitter 上引用其他玩家的风格 例如 用户名 该脚本看起来像这样 不是真正的 PHP 只是想象脚本 3 string I loved the
  • Woocommerce 让产品显示在存档页面中

    我正在尝试让所有产品显示在我商店的存档页面中 我想知道他们的id我正在使用我的一个钩子 它在 wp head 上运行并检查 if is product category 我想以某种方式访问 产品的查询并获取它们的 ID if is prod
  • 如何从父类函数访问子类中定义的常量?

    我从 php net 看到这个例子 但 c MY CONST 仅在 5 3
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 扩展蓝图类?

    我想覆盖timestamps 函数中发现Blueprint班级 我怎样才能做到这一点 e g public function up Schema create users function Blueprint table table gt
  • 从 Getdate() 获取时间

    我想采取Getdate 结果 例如 2011 10 05 11 26 55 000 into 11 26 55 AM 我看过其他地方并发现 Select RIGHT CONVERT VARCHAR GETDATE 100 7 这给了我 11
  • SELECT max(x) 返回 null;我怎样才能让它返回0?

    运行以下命令时如何返回 0 而不是 null SELECT MAX X AS MaxX FROM tbl WHERE XID 1 假设没有XID 1的行 or SELECT coalesce MAX X 0 AS MaxX FROM tbl
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • 交换关联数组中的两个项目

    Example arr array apple gt sweet grapefruit gt bitter pear gt tasty banana gt yellow 我想调换一下柚子和梨的位置 这样数组就变成了 arr array ap
  • Supabase 客户端权限被拒绝,模式为 public

    每当我尝试使用 supabase supabase js 查询数据库时 都会收到错误 error hint null details null code 42501 message permission denied for schema
  • 在 PHP 中使用 phpseclib 时出现 RSA 问题

    我正在尝试在 phpseclib 中使用 RSA 实现 我认为在函数中执行一次代码并重新使用该函数会更容易 当我尝试向代码发送短信时 我收到一条错误消息 提示 解密错误 测试还让我意识到每次代码运行时密文都是不同的 所以我显然在那里做错了什
  • 在 Wordpress 站点中进行 AJAX 调用时出现问题

    我在使用 Wordpress 站点功能的 AJAX 部分时遇到了一些问题 该功能接受在表单上输入的邮政编码 使用 PHP 函数来查找邮政编码是否引用特定位置并返回到该位置的永久链接 我的第一个问题是关于我构建的表单 现在我的表单操作是空白的
  • PHP 与 MySQL 查询性能( if 、 函数 )

    我只看到这个artice http www onextrapixel com 2010 06 23 mysql has functions part 5 php vs mysql performance 我需要知道在这种情况下什么是最好的表
  • 如何使用 SQL Server 2008 将行复制到同一个表中

    A 到目前为止我的方式 sqlCommand CommandText INSERT Table1 column1 column2 column3 SELECT column1 column2 column3 FROM Table1 WHER
  • PHP 中只保留数组的前 N ​​个元素? [复制]

    这个问题在这里已经有答案了 有没有办法只保留数组的前 N 个 例如 10 个 元素 我知道有array pop 但是有没有更好 更优雅的方法呢 您可以使用array slice http php net array slice or arr
  • 表单计算器脚本基本价格未加载 OnLoad

    我的表单中有一个计算器来计算我的下拉选项选择 function select calculate on change calc input type checkbox calculate on click calc function cal
  • 使用加权行概率从 PostgreSQL 表中选择随机行

    输入示例 SELECT FROM test id percent 1 50 2 35 3 15 3 rows 你会如何编写这样的查询 平均 50 的时间我可以获得 id 1 的行 35 的时间 id 2 的行 15 的时间 id 3 的行
  • 如何在 PHP 中从 IP 地址/国家/地区名称查找时区 ID?

    谁能告诉我 PHP 中是否有任何方法可以从 IP 地址或国家 地区名称获取时区区域 例如 亚洲 加尔各答 描述 我正在尝试根据他 她的国家 地区设置用户时区 我从他的 IP 地址获取用户所在国家 地区 但我需要该国家 地区的时区区域 例如
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • 是否可以引用同一个表中的不同列?

    如果博客有一个 类别 表 如下所示 CREATE TABLE categories id INTEGER PRIMARY KEY AUTO INCREMENT parent id INTEGER NOT NULL name VARCHAR

随机推荐

  • 带有最小和最大按钮的 JSpinner

    我正在寻找一个类似 JSpinner 的组件 它提供内置按钮 可以立即将微调器值设置为 jspinner 模型的最小值或最大值 在我自己实现这个之前 我认为以前可能有人做过 尽管我在该主题上的谷歌搜索没有成功 有这样的组件吗 还是我应该自己
  • 使用迭代器迭代不同的数据帧

    假设我有 n 个数据框df 1 df 2 df 3 df n 分别包含名为SPEED1 SPEED2 SPEED3 SPEEDn 例如 import numpy as np df 1 pd DataFrame SPEED1 np rando
  • 子类 UITabBarController 来调整其框架

    我在调整 UITabBarController 大小时遇到 一些问题 因为我只想让它占据屏幕的下半部分 它似乎强制自己显示屏幕的整个高度 如果显示则减去状态栏 我尝试过对其进行子类化并在方法上修改控制器的视图框架 例如viewWillApp
  • Athena/Presto - UNNEST 映射到列

    假设我有一张这样的桌子 表 qa list id question id question answer 1 100 question1 answer 2 101 question2 answer 3 102 question3 answe
  • WordPress:列出没有评论的帖子

    我有一个简单的页面 我想显示尚未评论的帖子列表 我该怎么做 我想我可以将一些参数添加到 query posts 中 谢谢 您可以设置过滤器和查询变量来修改查询帖子的 SQL 将其添加到您的主题中functions php file func
  • 实现 delaunay 三角剖分的 Bowyer-Watson 算法

    我正在尝试实现以下 Bowyer Watson 算法来实现 Delaunay 三角剖分 function BowyerWatson pointList pointList is a set of coordinates defining t
  • 在 ruby​​ 中使用单引号与双引号相比是否有性能提升?

    您知道在 ruby 中使用双引号代替单引号是否会以任何有意义的方式降低 ruby 1 8 和 1 9 中的性能吗 所以如果我输入 question my question 它比更快吗 question my question 我想象 rub
  • R readHTMLTable 无法加载外部实体[重复]

    这个问题在这里已经有答案了 当我在笔记本电脑上运行该线路时 table500 lt readHTMLTable http en wikipedia org wiki List of S 26P 500 companies 1 它获取数据 当
  • Android:如何处理按钮点击

    在非 Java 和非 Android 领域拥有丰富的经验 我正在学习 Android 我对不同的领域有很多困惑 其中之一是如何处理按钮点击 至少有 4 种方法可以做到这一点 它们被简要列出here 为了保持一致性 我将列出它们 拥有以下成员
  • 有没有人尝试过在 Ubuntu(最好是 Ubuntu 9)上从源代码安装 ruby​​ 和 ruby​​gems?

    Ruby on Rails 网站建议在 Linux 下从源代码安装 Ruby 我在全新安装的 Ubuntu 9 上从源代码构建 ruby 时遇到了许多 C 库问题 我在网上找到的有关在 Ubuntu 上安装 ruby 的所有说明都涉及使用预
  • 如何将日期“缩短”半个月[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 函数 cut 提供了一种按 月 周 季度 剪切日期数据的简单方法 但我想按半个月剪切日期数据 有没有简单的方法可以做到这一点 假设您指的是天文学意义上的半个月 其中第 1 15 天属于
  • 如何将数组存储为 Perl 散列中的值?

    我正在尝试在 Perl 中创建一个散列 其值是数组 就像是 my array split 1 2 my hash a gt array 令人惊讶的是 这个报告 使用 Data Dumper VAR1 a gt 1 2 gt undef 这一
  • Firebase 或 SQLite [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我是 Android 开发新手 目前正在开发一个使用 SQLite 作为数据库的应用程序 问题是 我想与使用该应用程序的其他人共享信息 据我所知 单
  • 如何推迟内联Javascript?

    我有以下 html 代码
  • 停止模式 UIViewController 旋转

    模态UIViewController的父级自动旋转 但是当模态 VC 启动时 我只希望它以纵向显示而不是可旋转 我试过简单地返回 NOshouldAutorotate 在模态VC中 但没有欢乐 支持 iOS 5 非常感谢任何帮助 基本上 如
  • 如何创建类似于 Xcode 属性面板的选项卡式面板

    我正在尝试创建一个类似于 Xcode 属性面板的选项卡式面板 但标准选项卡式面板似乎具有不同的外观和感觉 无法更改它 应使用哪些控件来创建外观相似的选项卡式面板 编辑 我没有使用 NSTabViewController 只是有 TabVie
  • Mongo 用户定义函数和 MapReduce

    mongodb 有没有办法创建用户定义的 Javascript 函数 我在客户端有几个 Map Reduce 函数 我想在其他 MR 函数中使用它们 例如 多个 MR 函数可以计算各种平均值 我希望能够像这样使用它们 function re
  • TypeScript 装饰器和循环依赖

    考虑使用装饰器的相互依赖代码示例 如下 现在考虑以下工作流程 是的 我确实想传递实际导出的类 因为我稍后需要使用它们 应用程序导入并运行Parent ts Test Child 导致应用程序导入Child ts装修时 注 班级Parent代
  • 合并来自 git 存储库外部的更改

    我正在与该国另一边的另一位开发人员合作 他是我们项目的负责人 并且没有使用正式的版本控制系统 就我而言 我正在 git 中跟踪我的所有代码 我最近开始为主项目做出贡献 并且也希望能够跟踪其他开发人员的更新 当我收到他更新的代码时 它通常是
  • 在应用 LIMIT 之前获取结果计数的最佳方法

    当对来自数据库的数据进行分页时 您需要知道将有多少页来呈现页面跳转控件 目前我通过运行查询两次来做到这一点 一次包装在count 确定总结果 第二次应用限制以仅返回当前页面所需的结果 这看起来效率很低 有没有更好的方法来确定之前会返回多少结