通过外键动态建表

问题描述 投票:0回答:1

我正在开发一个记录多个探测器值的应用程序,我想知道如何将这些值存储在我们的 DBMS 中。

传统的方法是创建一个像这样的表:

CREATE TABLE `probe_temperature` (
  `INSTANT` timestamp,
  `TEMPERATURE` float,
  `PROBE_ID` bigint,
  CONSTRAINT `FK_probe_temperature_PROBE_ID` FOREIGN KEY (`PROBE_ID`) REFERENCES `probe` (`ID`)
)

这样,表很快就会有数百亿条记录,用于大约一百个探针。

99.9% 我们的查询将针对链接到单个探针的数据集。

考虑到这一点,我想知道通过探针创建表的相关性。类似的东西:

CREATE TABLE `probe_temperature_xxxx` /* where xxxx is the id of the probe */( 
  `INSTANT` timestamp,
  `TEMPERATURE` float
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;

我认为这有几个优点:

  • 通过删除探针 ID 节省几 GB。
  • 提高性能(这是真的吗?)

但这增加了代码和维护的复杂度

我还阅读了有关表分区的文章,这些文章对性能有相同的好处,但对存储空间没有好处(这是真的吗?)

性能问题是真正的风险吗?

如果是,使用动态表是个好主意吗?

sql datatable query-optimization database-performance
1个回答
0
投票

“节省几千兆字节”并不是设计决策的充分理由,因为它的存储量微不足道。

只需创建一个表并在探针上对其进行索引/分区 - 取决于您的 DBMS 支持的内容。

这不是任何现代 DBMS 都应该遇到的数据量 - 所以我不会太担心性能调整(除非/直到你的现实世界查询的执行速度没有你想象的那么快)期待)

© www.soinside.com 2019 - 2024. All rights reserved.