我目前正在重新设计 mysql bdd。 这个数据库实际上是一个有200个字段、几百万行、几乎没有索引的巨大表……总之,灾难性的性能和巨大的内存消耗!
我首先通过设置 1:n 关系来减少字段数量。
我有一个关于特定点的问题: 该数据库中的许多字段是可选的并且很少填写。(有时几乎从不填写) 在这种情况下最好的做法是什么?
- 将字段保留在表中,即使该字段经常为空值
- 建立一个 n:n 关系,并知道这些关系(如果存在)只会返回一行
- ...或者我没有想到的其他解决方案
提前感谢您的明智建议;) 迪米特里
最佳答案
我的建议:
- 首先,请确保normalize你的数据库。至少到3rd Normal Form 。这可能会减少一些原始列并将它们拆分到多个表中。
- 完成此操作后,如果您的某些表格中仍有大量“可选且很少填充”的列,请考虑如何根据您的需求进行操作:什么对您来说最重要?磁盘空间还是性能?
看看MySQL Optimazing Data Size根据您的需要,获取重新设计数据库的额外提示/改进。
关于“建立 n:n 关系...”(我认为您的意思是 1:1 关系)在某些情况下可能是一个有趣的选项:
在某些情况下,将经常扫描的表分成两个可能会有好处。如果它是动态格式表并且可以使用较小的静态格式表,该表可用于在扫描表时查找相关行,则尤其如此(摘自 here )
关于mysql - 非常大的数据库上的可选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55844358/