表有很多列或许多小表?

时间:2016-05-09 12:22:57

标签: mysql sql sqlite

我创建了一个包含30列的表。

CREATE TABLE "SETTINGS" (
  "column1" INTEGER PRIMARY KEY,
  ...
  ...
  "column30"
)

但是,我可以对它们进行分组并创建不同的表,它们可以在主表中使用外键。哪种方式最好?或者列的数量很小,所以它跟我将遵循的方式相同?

2 个答案:

答案 0 :(得分:5)

这取决于您经常进行的数据和查询。

最适合一张大桌子

  • 如果您需要提取所有列
  • 如果您需要同时更新多个字段
  • 如果所有字段或全部字段都没有空值

最适合许多小桌子

  • 如果数据是"稀疏"这意味着没有多少列具有您可以想象的值,可以将它们拆分到不同的表中,并且只有在不存在空值时才在子表中创建记录
  • 如果一次只提取少量相关字段
  • 如果您一次只更新相关字段
  • 每个列的名称更好(例如,代替domicile_address和residence_address,您可以在两个表的住宅和住所中使用两个具有命名地址的列)

问题在于,通常您可以根据情况使用这两种解决方案。必须进行使用分析才能选择正确的。

答案 1 :(得分:2)

如果它们确实被命名为column1,column2 .... column30那么这是一个相当好的指标,表明您的数据未规范化。

遵循规范化规则应始终是您的出发点。 有时违反规则的原因 - 但是在你知道你的数据应该是什么样之后。

关于违反规则...... 可能在这里有两种可能的情况(在您确定了正确的结构并且完成了适当的测试级别之后)适当的数据量):

  • 加入很贵。在单个表中保持父/子关系可以提高查询性能,您通常只选择父和子并检索单个行

  • 除非您使用固定宽度的MyISAM表,否则更新记录会导致它们更改大小,因此必须重新定位到表数据文件中。这很昂贵,可能会对检索产生影响。