我正在设置一个可能超过70列的表。我现在正在考虑将其拆分,因为每次访问表时都不需要列中的某些数据。然后,如果我这样做,我将不得不使用连接。
在什么时候,如果有的话,它被认为是太多列?
答案 0 :(得分:127)
一旦超过maximum limit supported by the database,就会被认为太多了。
每个查询都不需要返回每一列的事实是完全正常的;这就是SELECT语句允许您明确命名所需列的原因。
作为一般规则,您的表格结构应该反映您的域名模型;如果你确实拥有属于同一实体的70(100,你有什么)属性,则没有理由将它们分成多个表。
答案 1 :(得分:25)
将表拆分为几个列较少的列有一些好处,也称为Vertical Partitioning。以下是一些:
如果您有多行的表,修改索引可能需要很长时间,因为MySQL需要重建表中的所有索引。将索引拆分为多个表可以使速度更快。
根据您的查询和列类型,MySQL可能会将临时表(用于更复杂的选择查询)写入磁盘。这很糟糕,因为磁盘i / o可能是一个很大的瓶颈。如果查询中包含二进制数据(文本或blob),则会发生这种情况。
不要过早地进行优化,但在某些情况下,您可以从较窄的表中获得改进。
答案 2 :(得分:13)
违反规范化规则时太多了。如果要规范化数据库,很难获得那么多列。设计数据库以模拟问题,而不是围绕任何关于优化特定数据库平台的人为规则或想法。
将以下规则应用于宽表,并且单个表中的列可能会少得多。
这是link,可以帮助您。
答案 3 :(得分:0)
除非所有属性都属于同一实体并且彼此不依赖,否则这不是问题。 为了使生活更轻松,您可以将一个文本列存储有JSON数组。显然,如果您每次都获取所有属性都没有问题。尽管这将完全破坏将其存储在RDBMS中的目的,并使每个数据库事务都大大复杂化。因此,不建议在整个数据库中都采用这种方法。
答案 4 :(得分:0)
同一表中的列过多也可能导致复制中的巨大问题。您应该知道主服务器中发生的更改将复制到从服务器中。例如,如果更新表中的一个字段,则整行将为w