PostgreSQL 计数查询、物化视图的效率[重复]

2024-05-06

可能的重复:
PostgreSQL 计数查询优化 https://stackoverflow.com/questions/13075210/optimization-of-count-query-for-postgresql

使用 PostgreSQL 9.2,我们试图弄清楚是否有一种方法可以跟踪查询结果的数量,并以有效的方式返回该数字。该查询每秒应执行几次(可能是数十到数百甚至数千)次。我们现在的查询看起来像这样,但我们想知道这是否效率低下:

-- Get # of rows that do not have ‘parameter value’ in array_column
select count(*) 
    from table
    where not (ARRAY[‘parameter value’] <@ table.array_column)

我的问题是(一个答案可能同时解决多个问题):

Is the count(id) (or count(*)就此而言)对于该查询,线性(O(n)) query?

有什么办法可以让 PostgreSQL 中的查询更加高效吗?请记住,我们需要查询不同的参数值,因此我认为为其保留物化视图是不可行的(尽管,如果认为更好的话,我们可能会考虑为每个参数值创建一个物化视图)。

我应该对 PostgreSQL 服务器的查询、数据库结构或配置进行任何更改,以帮助我提高查询性能吗?

任何指示或建议将不胜感激。如果这是完全错误的方法,请告诉我。

Edit

考虑到答案,我想知道使用物化视图是否合理。我的意思是拥有多个物化视图(每个物化视图都有不同的参数值,具有不存在该值的行)。我们的参数值在某种程度上是可预测的,因此这作为解决方案似乎并不是太遥远。这带来了另一个问题:物化视图在这里有帮助吗?我可以在数据库中创建的物化视图(或表)的数量是否存在一些限制(无论是定义还是性能)?


我想到的第一个想法是缓存该值。

您应该评估该值的变化率,并根据该变化率决定是否要在更新该表时执行触发器以计算新值并将其缓存在某处。

该值的结果查询将是一个简单的 SELECT,没有任何 WHERE 子句,因此速度非常快。

或者您可以简单地进行更改,并在更改前后获取一些统计数据,以了解您的速度是否有所提高。

See there https://wiki.postgresql.org/wiki/Slow_Counting以获得进一步的解释。

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

PostgreSQL 计数查询、物化视图的效率[重复] 的相关文章

  • 在PostgreSQL中,如何使用COPY命令插入数据?

    我在使用 PostgreSQL 数据库运行 1 个 NodeJs 项目时遇到问题 尝试使用 pgAdmin 插入数据时出现错误COPY命令 COPY beer name tags alcohol brewery id brewery id
  • PostgreSQL WHERE 计数条件

    我在 PostgreSQL 中有以下查询 SELECT COUNT a log id AS overall count FROM Log as a License as b WHERE a license id 7 AND a licens
  • IndexError:索引 10 超出尺寸为 10 的轴 0 的范围

    我正在以数字方式为 x 网格和 x 向量以及时间网格设置网格 但我再次设置了一个数组x 位置 只能在 0 到 20 之间并且t 时间 将从 0 到 1000 以便求解热方程 但每次我想要 例如 我将步数设置为 10 时 都会收到错误 Tra
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 如何从另一个数组值中过滤数组值并返回新数组? [复制]

    这个问题在这里已经有答案了 我有两个数组 all languages and taken languages 第一个包含所有语言 例如 200 种或其他语言 第二个包含之前选择的语言 从 0 到 200 种 我需要删除所有已采用的语言 ta
  • 数组上的 Bash 子字符串扩展

    我有一组带有给定后缀的文件 例如 我有一组带有后缀的pdf文件 pdf 我想使用子字符串扩展来获取不带后缀的文件名 对于单个文件我可以使用 file test pdf echo file 0 4 要对所有文件执行此操作 我现在尝试 file
  • PHP 中根据相似值对数组进行分组

    我有一个具有以下结构的数组
  • Postgres 性能问题

    我们正在运行 Postgres 9 1 3 最近我们的一台服务器开始遇到重大性能问题 我们的查询在一段时间内运行良好 但截至 8 月 1 日 速度显着减慢 看起来大多数有问题的查询都是 Select 查询 带有 count 的查询尤其糟糕
  • 在 Node.js 中一次迭代 50 个项目的数组

    我是 node js 的新手 目前正在尝试编写数组迭代代码 我有一个包含 1 000 个项目的数组 由于服务器负载问题 我想一次迭代 50 个项目的块 我目前使用 forEach 循环 如下所示 我希望将其转换为上述块迭代 result i
  • SQLAlchemy:检查给定值是否在列表中

    问题 在 PostgreSQL 中 检查某个字段是否在给定列表中是使用IN操作员 SELECT FROM stars WHERE star type IN Nova Planet SQLAlchemy 的等价物是什么INSQL查询 我尝试过
  • Java byte[] 与 String 之间的转换

    为什么这个junit测试失败了 import org junit Assert import org junit Test import java io UnsupportedEncodingException public class T
  • 使用 unnest() 返回行?

    我尝试在完成后返回一组行UPDATE 像这样的东西 UPDATE Notis new noti SET notis noti record type FROM SELECT FROM Notis WHERE user id 2 FOR UP
  • 如何使用 Postgres 数据库 URL 字符串传递证书路径以进行 SSL 连接

    我正在尝试通过 SSL 为我的 Spring 启动应用程序保护与 AWS RDS 实例的连接 我看了几个博客和官方文档 https jdbc postgresql org documentation head ssl client html
  • 使用 Fortran 进行数组问题的二分查找

    我正在使用 Schaum 的 Fortran 77 编程概要 一书 其中有一个关于使用括号值组方法进行二分搜索的示例 首先这是代码 INTEGER X 100 INTEGER RANGE INTEGER START FINISH PRINT
  • PDO 从表中获取一列到一维数组中

    我对 PDO 和让它们与 MySQL 一起工作还很陌生 我似乎在插入新数据和检索单个结果方面进展顺利 但是我坚持了下来 我有一张由配料组成的桌子 我试图将所有配料放入一个数组中 我已经直接在 SQL 中运行查询 它显示了所有结果 但是使用
  • 需要更快的数组复制

    经过一些阅读后 我发现在 java 中复制数组的方式存在一些差异 对于我的应用程序 我有一个递归节点树 每个节点都包含一个 2d 板数组 8x8 通过探查器测试 我能想到的最好的办法是 java util Arrays copyOf arr
  • SerializeArray() 给出空数组

    我正在尝试使用 seralizeArray 收获形式输入值 输入字段由具有相应价格的项目列表组成 我想根据相应的密钥对保存每个值 但不断收到错误 empty array with 0 length 我尝试了几种选择器组合 但仍然得到 如何才
  • 访问结构向量

    我有一个结构 struct OutputStore int myINT string mySTRING 如果我创建一个 OutputStore 类型的数组 如下所示 OutputStore OutputFileData new Output
  • JavaScript 数组中的空项和未定义项有什么区别? [复制]

    这个问题在这里已经有答案了 考虑以下 JavaScript 代码 在节点 REPL 中 gt let a new Array 10 undefined gt a lt 10 empty items gt gt a map e gt 1 lt

随机推荐