MySQL – 多less列太多了?
我正在build立一个可能有70列以上的桌子。 我现在想分割它,因为每次访问表时都不需要列中的某些数据。 再次,如果我这样做,我只剩下不得不使用连接。
如果有的话,是否被认为是太多的专栏?
一旦超过数据库支持的最大限制,它被认为是太多了。
事实上,你不需要每个查询都返回每列,这是完全正常的。 这就是为什么SELECT语句可以让你明确地命名你所需要的列。
一般来说,你的表结构应该反映你的领域模型; 如果你真的有70(100,你有什么)属性属于同一个实体,没有理由把它们分成多个表。
将表分成less数几列有一些好处,也称为垂直分区 ( Vertical Partitioning) 。 这里有几个:
-
如果你有多行的表,修改索引可能需要很长时间,因为MySQL需要重build表中的所有索引。 把索引分成几个表格可以让这个更快。
-
根据您的查询和列types,MySQL可能会将临时表(用于更复杂的select查询)写入磁盘。 这是不好的,因为磁盘I / O可能是一个巨大的瓶颈。 如果在查询中有二进制数据(文本或blob),就会发生这种情况。
-
更宽的表可能会导致查询性能降低。
不要过早地优化,但在某些情况下,可以从较窄的表中获得改进。
违反正常化规则的时候太多了。 如果你正在规范你的数据库,那么得到那么多列是相当困难的。 devise你的数据库来模拟问题,而不是围绕任何特定的数据库平台优化的人为规则或想法。
将以下规则应用于宽表,并且在单个表中可能有less得多的列。
- 没有重复的元素或元素组
- 连接的键没有部分依赖关系
- 不依赖于非关键属性
这里有一个链接可以帮助你。