开门见山,我尝试在 google 和 SO 上搜索,但找不到我要找的东西。可能是因为我的搜索措辞不正确。
我的问题是,
我有几张 table ,每年可容纳 1,000 行到 100,000 行之间的任何地方。我想弄清楚,我/我应该如何处理数据归档?我在数据库方面经验不足,但下面是我想出的一些方法,我不确定哪种方法更好。当然要考虑到性能和编码的难易程度。我正在使用 Java 1.8、Sql2o 和 Postgres。
方法一
每年将数据存档到一个单独的数据库中。
我不太喜欢这种方法,因为当我们想要搜索旧数据时,我们的应用程序将需要搜索到不同的数据库,为此添加更多代码对我来说会很麻烦。
方法二
将超过 2-3 年的数据存档到单独的数据库中。
并在线路上使用状态来提高性能。 (参见方法 3)这是我倾向于作为“最佳”解决方案的方法,其中代码不那么复杂,但数据库也保持相对干净。
方法三 只要有每一行的状态(例如:A=active,R=Archived)就可能提高查询的性能。只要有一个“select * from table where status = 'A'”来减少要查看的行数。
最佳答案
每年 100,000 行并不算多。 [1]
无需将其移至单独的位置。如果您已经有了良好的索引,那么多年来您几乎肯定不会注意到任何性能下降。
但是,如果您想绝对确定,可以添加一个 year
列并为其创建一个索引(或将其添加到您现有的索引中)。但实际上,只对您知道需要它的表执行此操作。例如,如果您的表已经有作为索引一部分的 date
列,则不需要单独的 year
列。
[1] 除非您有数以千计的列和/或包含大型二进制 blob 的列 - 这在此处似乎并非如此。
关于java - SQL 查询性能、存档与状态更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50894110/