java - SQL 查询性能、存档与状态更改

标签 java sql postgresql sql2o

开门见山,我尝试在 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/

相关文章:

java - 此 Java 和 C 代码之间的区别?

java - 能不能把所有的jar依赖打包在一个大jar里?

ruby-on-rails - 如何避免在简单的登陆注册表单中被其他人覆盖 hstore 记录?

mysql - 如何在 SQL 中连接两个表并且每个连接索引只获取 1 行

sql - 返回具有相同 ref_id 的每个元素的最后金额

php - 如何从 php 中的本地连接连接到 Heroku postgres 数据库

java - 如何从 mongodb 或 java 查询 prolog 中的文件

java - 我在 getInputStream() 和 getOutputStream 方法上遇到错误?

mysql - 对另一个表中的所有 ID 运行 MySql 查询

sql - sql中的希伯来语和其他语言