何时添加列与添加相关表?

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

我有一个包含超过 1 亿行的大表。几个月来我一直在修剪它,去除坏数据(按行),试图保持它很小。我这张桌子上已经有 9 列了。我想向其中添加一个新的布尔列。以下是目前的状态。

这张桌子一开始很小,现在变得相当宽。再一次,我的任务是在每行添加更多信息。这次是一个新的布尔字段。我预计该字段的数量较少,这意味着只有不到 10% 的人会将此设置为 true。我知道我可以将其设置为默认空,并且它是一个应该很小的布尔列。

但是,我想得到一些建议。这张桌子不能变得无限宽,我需要解决这个问题。在这种情况下,当我要添加其他数据时,创建另一个表并外键引用该记录是否更有意义?专业人士在数据库设计中如何处理这个问题?

可用性的最佳情况是将所有数据记录在记录中,以便任何形式的查询都可以在表本身上获取或计算,而无需连接。我只是不相信它会扩展到 10 亿行(插入 meme)。

mysql database database-design
1个回答
5
投票

我曾从事过一些 DBA 工作,其中我支持具有数十亿行表的 MySQL 实例。在这种规模下,必须注意正确优化查询。您不想以这种规模进行表格扫描。

但这是关于行,而不是列。您首先询问了有关列的问题。

在添加列还是添加另一个表之间进行选择的方法是遵循数据库规范化规则。如果新列用于与当前表相同实体的属性,请将该列添加到该表。如果它是多值属性或者它确实是其他实体的属性,则将其添加到不同的表中。

仅仅因为列太多而创建另一个表的情况很少是正确的选择。一个给定的 MySQL 表可以很容易地包含几十个列,如果你小心的话,甚至可以有数百个列。

理论上,对于标准化而言,适合放入同一个表中的列数没有限制。但由于在给定实现中存储这些列的代码存在限制(例如 MySQL 中的 InnoDB 存储引擎)。

参见https://www.percona.com/blog/2013/04/08/understanding-the-maximum-number-of-columns-in-a-mysql-table/

因此,MySQL 中表的最大列数介于 191 到 2829 之间,具体取决于多种因素。

在该博客的评论中,我能够设计一个在 59 列时未能创建的表。阅读博客了解详细信息。

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