mysql - 非常大的数据库上的可选字段

标签 mysql

我目前正在重新设计 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/

相关文章:

mysql - mysql中Insert命令中的Where子句

php - 数据表:根据数据更改行颜色

php - 如何优化升级web应用?

PHP 响应缓存 : file vs MySQL

mysql - Delphi SQL 日期读取问题

mysql - 如何获取 GROUP BY 的最后一项

mysql - 如何避免 MySQL 中的循环触发器依赖

php - 排行榜 - MySQL 按个人总和排序

php - MYSQL,插入/更新,if else 语句

mysql - 选择较少的查询不起作用