|
|
1
5
PostgreSQL 9.2之前,MVCC的实现要求任何查询访问表的每一行,以检查该行的版本是否对当前事务可见。即使查询只涉及索引列,也会发生这种情况。这在大型表上表现为计数缓慢,即使对于简单的情况也是如此。 PostgreSQL 9.2实现 index only scans ,这可能有助于缓解某些工作负载的此问题。 如果您被困在v9.2以下,如果您只需要一个简单查询的近似行数,那么有一些已知的解决方法。看见 http://wiki.postgresql.org/wiki/Count_estimate . |
|
|
2
1
保留一个按天汇总的事件表。
每天跑步:
假设您想要的总数介于“2013-01-01 10:37”和“2013-03-02 11:20”之间:
在中,您将读取数百或数千行,而不是读取1亿行。如果索引正确,它会很快。 |
|
|
3
1
另一种方法可能是对表进行分区。这个家伙似乎已经解决了一个非常类似的分区问题: 我对使用他的方法的担忧是可维护性。在他的例子中(你必须点击教程的第1部分,看看他是如何创建分区的),他手动创建了每个子表,并在触发器中对到子表的路由进行了硬编码。如果您的表不断增长,那么您将要做大量的DBA工作。 然而,他的表现似乎确实得到了很大的提升。因此,如果您能弄清楚如何使其更易于维护,这可能是一个很好的方法。 |
|
|
4
1
这正是维度建模和数据仓库设计要解决的问题。 我之前参与的一个项目在几周内用Ruby构建了一个数据仓库,以便处理此类查询,并使用一个简单的REST API将其公开给主应用程序。基本上,您提取数据并将其转换为“星型模式”,该模式针对您所描述的查询进行了高度优化。 Postgresql非常适合作为数据仓库数据库。 这是一个非常详细的主题,一个很好的入门资源是: http://www.amazon.com/Data-Warehouse-Toolkit-Complete-Dimensional/dp/0471200247 |
|
Homer Jay Simpson · 添加列出现次数 1 年前 |
|
|
Tez · 数据帧-统计三列中具有相似(相同)变量的变量的频率 2 年前 |
|
|
swat · 在同一列上选择SQL语句 2 年前 |
|
|
Elijah · 计算与其他列值关联的列中的值集[重复] 2 年前 |
|
|
Chulho Chang · 计算一行中特定字符的数量(不在范围内) 2 年前 |
|
TarJae · 如何在一次运行中对多个列计数使用计数 2 年前 |