拥有多列表是否有任何缺点

时间:2012-07-23 09:55:33

标签: mysql database database-design

我正在计划一个数据库结构,它将存储相当多的数据。我们需要为每个项目存储50个不同的“列”数据。添加时间戳,为我们提供52列(以及2个索引,这将是此数据将被过滤的唯一方式)。这个数据库每天会添加几千行(并且从未更新过),并且会在一段时间内使用。

所以我的第一选择是把所有东西都塞进一张桌子里。让我思考52列是否有点不好或什么?我从来没有多想过。当然,插入代码会令人恼火,但它并不像我要手工编写它们。

我应该将它拆分成多个表(然后使用连接或其他东西吗?),或者表格是否大而没有问题?如果它有所作为我正在使用mysql。

补充:澄清我将如何使用数据:

  • 排序和过滤只能在索引列上完成。
  • 这些数据将用于当前计划中的“人类消费”,因此我们将始终访问整行(在需要时将其输出到csv或其他任何行)。
  • 不会删除或更新。会有很多插入,并且(不太常见)选择。
  • 数据库中的其他数据不会有任何“链接”(外键或其他)
  • 所有数据都与同一件事有关。没有“明显”的方法来规范它,并将其分解为表格只会将类别的类别放入数据并存储它们。

4 个答案:

答案 0 :(得分:4)

不是那么多的列数使设计不幸。这是所有这些列是否真的属于同一个表。当数据与表的密钥不紧密相关时,数据规范化规则可以说明将数据存储在一个表中的结果。

你有必要学习规范化规则以及当你不遵守它们时会发生什么在以后的某个时候,你也可以了解有意偏离规范化规则可能导致良好设计的情况。但是,在你开始规范表格设计的价值之后,你才能学到这一点。

答案 1 :(得分:2)

我认为如果可能的话,你应该把它分成几个表(规范化表)。然后,我的建议是,您应该使用经常访问的表的索引。索引可以使查询变得更快。但缺点是,插入新数据时的过程会变慢。

答案 2 :(得分:1)

表中有52列没有任何错误。

但是,如果您经常只查询这些列的某些子集,那么您可能会发现将这些常用列一起存储在自己的表中而不会出现多余的列会带来一些性能优势。

也就是说,在需要时加入辅助表来访问额外的列会影响性能(两个表中的INSERT操作也会更慢),因此需要进行权衡;另请注意,多个表会导致数据重复(至少是外键),因此会占用更多空间。

您可以对两种方法进行基准测试,以了解您自己的情况会出现什么差异。就个人而言,我会选择一张桌子直到表演让我看到其他地方。

答案 3 :(得分:0)

拥有庞大的表格会使非索引列的搜索和排序变得更加繁琐和昂贵。

最好有小而有效的表格。

您可以选择将数据拆分为多个1对1表,也可以选择使用键/值表。

如果您感兴趣,请键入值键表:http://www.devshed.com/c/a/MySQL/Database-Design-Using-KeyValue-Tables/