mysql - 有多少列太多了?

时间:2009-09-24 20:33:51

标签: sql mysql

我正在设置一个可能超过70列的表。我现在正在考虑将其拆分,因为每次访问表时都不需要列中的某些数据。然后,如果我这样做,我将不得不使用连接。

在什么时候,如果有的话,它被认为是太多列?

5 个答案:

答案 0 :(得分:127)

一旦超过maximum limit supported by the database,就会被认为太多了。

每个查询都不需要返回每一列的事实是完全正常的;这就是SELECT语句允许您明确命名所需列的原因。

作为一般规则,您的表格结构应该反映您的域名模型;如果你确实拥有属于同一实体的70(100,你有什么)属性,则没有理由将它们分成多个表。

答案 1 :(得分:25)

将表拆分为几个列较少的列有一些好处,也称为Vertical Partitioning。以下是一些:

  1. 如果您有多行的表,修改索引可能需要很长时间,因为MySQL需要重建表中的所有索引。将索引拆分为多个表可以使速度更快。

  2. 根据您的查询和列类型,MySQL可能会将临时表(用于更复杂的选择查询)写入磁盘。这很糟糕,因为磁盘i​​ / o可能是一个很大的瓶颈。如果查询中包含二进制数据(文本或blob),则会发生这种情况。

  3. Wider table can lead to slower query performance.

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

答案 2 :(得分:13)

违反规范化规则时太多了。如果要规范化数据库,很难获得那么多列。设计数据库以模拟问题,而不是围绕任何关于优化特定数据库平台的人为规则或想法。

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

  1. 没有重复元素或元素组
  2. 对连锁密钥没有部分依赖性
  3. 不依赖于非关键属性
  4. 这是link,可以帮助您。

答案 3 :(得分:0)

除非所有属性都属于同一实体并且彼此不依赖,否则这不是问题。 为了使生活更轻松,您可以将一个文本列存储有JSON数组。显然,如果您每次都获取所有属性都没有问题。尽管这将完全破坏将其存储在RDBMS中的目的,并使每个数据库事务都大大复杂化。因此,不建议在整个数据库中都采用这种方法。

答案 4 :(得分:0)

同一表中的列过多也可能导致复制中的巨大问题。您应该知道主服务器中发生的更改将复制到从服务器中。例如,如果更新表中的一个字段,则整行将为w