MySQL – 多less列太多了?

我正在build立一个可能有70列以上的桌子。 我现在想分割它,因为每次访问表时都不需要列中的某些数据。 再次,如果我这样做,我只剩下不得不使用连接。

如果有的话,是否被认为是太多的专栏?

一旦超过数据库支持的最大限制,它被认为是太多了。

事实上,你不需要每个查询都返回每列,这是完全正常的。 这就是为什么SELECT语句可以让你明确地命名你所需要的列。

一般来说,你的表结构应该反映你的领域模型; 如果你真的有70(100,你有什么)属性属于同一个实体,没有理由把它们分成多个表。

将表分成less数几列有一些好处,也称为垂直分区 ( Vertical Partitioning) 。 这里有几个:

  1. 如果你有多行的表,修改索引可能需要很长时间,因为MySQL需要重build表中的所有索引。 把索引分成几个表格可以让这个更快。

  2. 根据您的查询和列types,MySQL可能会将临时表(用于更复杂的select查询)写入磁盘。 这是不好的,因为磁盘I / O可能是一个巨大的瓶颈。 如果在查询中有二进制数据(文本或blob),就会发生这种情况。

  3. 更宽的表可能会导致查询性能降低。

不要过早地优化,但在某些情况下,可以从较窄的表中获得改进。

违反正常化规则的时候太多了。 如果你正在规范你的数据库,那么得到那么多列是相当困难的。 devise你的数据库来模拟问题,而不是围绕任何特定的数据库平台优化的人为规则或想法。

将以下规则应用于宽表,并且在单个表中可能有less得多的列。

  1. 没有重复的元素或元素组
  2. 连接的键没有部分依赖关系
  3. 不依赖于非关键属性

这里有一个链接可以帮助你。