Mysql 超大数据库上的可选字段

Mysql 超大数据库上的可选字段,mysql,Mysql,我目前正在重新设计mysql bdd。 这个数据库实际上是一个包含200个字段、数百万行的巨大表,几乎没有索引。。。简而言之,灾难性的性能和巨大的内存消耗 我首先通过建立1:n关系来减少字段的数量 我有一个具体问题: 此数据库上的许多字段是可选的,很少填写。(有时几乎从不) 在这种情况下,最好的做法是什么 即使字段经常为空值,也将其保留在表中 设置一个n:n关系,要知道这些关系(如果存在)将只返回一行 …或者其他我没想到的解决方案 提前感谢您的明智建议;) 迪米特里我的建议是: 首先,确保

我目前正在重新设计mysql bdd。 这个数据库实际上是一个包含200个字段、数百万行的巨大表,几乎没有索引。。。简而言之,灾难性的性能和巨大的内存消耗

我首先通过建立1:n关系来减少字段的数量

我有一个具体问题: 此数据库上的许多字段是可选的,很少填写。(有时几乎从不) 在这种情况下,最好的做法是什么

  • 即使字段经常为空值,也将其保留在表中
  • 设置一个n:n关系,要知道这些关系(如果存在)将只返回一行
  • …或者其他我没想到的解决方案
提前感谢您的明智建议;) 迪米特里我的建议是:

  • 首先,确保你的数据库。至少是这样。这可能会减少一些原始列,并将它们拆分到多个表中
  • 一旦这样做了,如果你的表中还有很多“可选的,很少填充”的列,考虑如何根据你的需要进行:你最重要的是什么?磁盘空间还是性能
根据您的需要,查看有关重新设计数据库的额外提示/改进

关于“建立n:n关系…”(我想你指的是1:1关系),在某些情况下可能是一个有趣的选择:


在某些情况下,将经常扫描的表分成两部分可能是有益的。如果是动态格式表,并且可以使用较小的静态格式表,在扫描表(从中提取)时可以使用该表查找相关行,则这种情况尤其如此。

NULL
值可能占用较少或没有空间。除此之外,正如您已经在做的那样,规范化您的表可能是最好的改进。谢谢您的建议。我真的不在乎磁盘空间。重构的主要目的是提高性能,尤其是在执行选择查询时。然后研究规范化并设置适当的索引。非常感谢!到目前为止,最重要的是性能改进。对于这些可选列,我会根据具体情况采取行动,然后努力进行规范化,然后定义正确的索引。如果还有一些“可选且很少填充”的列,也不用担心。