我们有一个以下列方式存储大量测量数据的数据库。
这是当前情况的简短图表:
我们的问题是InstumentLoggings表增长到200GB以上,性能开始下降。备份和恢复也非常耗时。我们正在寻找将所有这些主键字段消除到InstrumentLoggings表中的单个字段的方法。
我可以简单地在Instrument表上添加一个额外的ColumnId列,并创建一个只有三个列的InstrumentLoggings表[InstrumentId |时间戳|值]其中主键由InstrumentId和Timestamp列组成?或者,在上一个想法中添加一个额外的列InstrumentLoggingId对性能有好处吗?
在下图中,您可以看到现在的日志记录表,以及两个备选方案。我对你的想法非常好奇,如果有任何其他选择,我现在也看不到......
答案 0 :(得分:2)
看看Why use multiple columns as primary keys (composite primary key)。看起来我们用于新开发的共识是:单列主键,然后在必要时对所包含的复合键进行唯一约束。
这将是您使用InstrumentLoggingId的选项2。如果需要,您可以使用唯一约束或仅在InstrumentId / Timestamp上添加其他索引。
修改
这种选择的理由(基于经验 - 我不是训练有素的DBA: - )):