gpt4 book ai didi

sql - 计算高数量级计数(100,000+)的匹配行数

转载 作者:行者123 更新时间:2023-11-29 11:21:41 30 4
gpt4 key购买 nike

目标:

获取计数的数量级为 100,000 - 10,000,000 的两次之间某事发生的次数。

当前实现:

  • 使用 PostgreSQL
  • 每个“事件”都记录为表格中的单独一行

列:

  • 事件类型
  • 发生的日期-时间

获取计数的查询(伪代码):

COUNT rows WHERE time_occurred > <begin_time> AND time_occurred < <end_time>

问题:

这可行,但查询效率很低,需要大约 40 秒才能响应。据我了解,PostgreSQL 不是用于此类查询的好数据库。

我坐下来想了几种方法可以在 O(log n) 时间内对这种类型的查询进行索引和执行,所以我知道这是可能的。

我应该使用什么工具来做到这一点?我们应该使用不同的数据库来存储计数行吗?有没有我们可以在 PostgreSQL 之上安装的包来轻松地做到这一点?我们有哪些选择?

备注:

不确定我是否清楚这一点。 COUNT 的结果应该在 100,000 - 10,000,000 的数量级。这意味着与查询匹配的行数大约为 100,000 - 10,000,000。表中的实际行数要多出一个数量级。

非常感谢!

最佳答案

在 PostgreSQL 9.2 之前,MVCC 的实现要求任何查询访问表的每一行,以检查该行的版本是否对当前事务可见。即使查询只涉及索引列,也会发生这种情况。这表现为大型表的缓慢计数,即使对于简单的情况也是如此。

PostgreSQL 9.2 实现 index only scans ,这可能有助于缓解某些工作负载的此问题。

如果您卡在 v9.2 以下,如果您只需要简单查询的近似行数,则可以使用一些已知的解决方法。参见 http://wiki.postgresql.org/wiki/Count_estimate .

关于sql - 计算高数量级计数(100,000+)的匹配行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15318219/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com