我正在设置一个可能有70列以上的表格。我现在考虑将其分解,因为不需要每次访问表时都需要列中的一些数据。然而,如果我这样做,我就不得不使用连接。
在什么情况下(如果有的话)会被认为列太多?
一旦超过 数据库支持的最大限制就会被认为是太多了。
不需要每个查询返回每个列的事实是完全正常的; 这就是为什么 SELECT 语句允许显式命名所需的列。
一般来说,您的表结构应该反映您的域模型; 如果您确实拥有属于同一个实体的70个(100个)属性,那么没有理由将它们分成多个表。
将表拆分成具有较少列的多个表(也称为 垂直分区)有一些好处。这里有一些:
如果表中有许多行,那么修改索引可能需要很长时间,因为 MySQL 需要重新构建表中的所有索引。将索引分割到几个表中可以加快速度。
根据您的查询和列类型,MySQL 可以将临时表(用于更复杂的选择查询)写入磁盘。这很糟糕,因为磁盘输入输出可能是一个很大的瓶颈。如果查询中有二进制数据(文本或 blob) ,就会发生这种情况。
较宽的表可能导致较慢的查询性能。
不要过早地进行优化,但在某些情况下,您可以从较窄的表中获得改进。
当它违反了正常化的规则时,它就太多了。如果正在规范化数据库,则很难获得这么多列。设计数据库是为了对问题进行建模,而不是围绕任何针对特定数据库平台进行优化的人为规则或想法。
对宽表应用以下规则,单个表中的列可能会少得多。
这里有一个 链接来帮助你。
这不是问题,除非所有属性都属于同一个实体,并且不相互依赖。 为了方便起见,您可以在一个文本列中存储 JSON 数组。显然,如果每次获取所有属性都没有问题的话。尽管这会完全破坏将其存储在 RDBMS 中的目的,并且会使每个数据库事务变得非常复杂。因此,在整个数据库中不推荐使用这种方法。
在同一个表中有太多的列也会在复制中造成巨大的问题。您应该知道,在主服务器中发生的更改将复制到从服务器。.例如,如果更新表中的一个字段,则整个行将为 w