我想在一张表中保留最近十年的股市数据。某些分析仅需要最近一个月数据的数据。当我进行短期分析时,需要很长时间才能完成操作。
为了解决这个问题,我创建了另一个表来保存当前年份数据。当我从该表中执行分析时,它比前一个快20倍。
现在我的问题是:
注意:我正在使用Postgresql数据库。
答案 0 :(得分:5)
你想要table partitioning。这将自动在多个表之间拆分数据,并且通常比手工操作要好得多。
答案 1 :(得分:4)
我正在接近完全相同的问题 表分区绝对是这里的方法。我会分段超过一年,它会给你更大程度的控制。只需设置分区,然后按月(或其他日期)约束它们。在你的postgresql.conf中,你需要将constraint_exclusion = on转为真正获益。这里的另一个好处是,您只能索引您真正想从中提取信息的确切表。如果您批量导入大量数据到此表中,您可能会获得稍微好一点的规则与触发器和分区,我发现规则更容易维护。但对于较小的事务,触发器要快得多。 postgresql手册有一个关于通过继承进行分区的很棒的部分。
答案 2 :(得分:0)
我不确定PostgreSQL,但我可以确认你是在正确的轨道上。处理大数据卷时,将数据分区为多个表,然后使用某种查询生成器构建查询绝对是正确的方法。这种方法在数据仓库中已经很好地建立,特别是在您的案例中,股票市场数据。
但是,我很好奇您为什么需要更新您的历史数据?如果您正在处理股票拆分,通常使用与原始历史数据结合使用的单独乘数表来实现,以提供准确的价格/份额。
答案 3 :(得分:0)
答案 4 :(得分:0)
坦率地说,您应该检查执行计划并尝试修复查询或索引,然后再采取更激进的措施。
索引的成本非常低(除非您进行大量插入),现有代码将更快(如果您正确索引)而不进行修改。
其他措施,例如分配......之后......