7

如果我的表有大量列(超过 80 列),我应该将其拆分为具有 1 对 1 关系的多个表还是保持原样?为什么?我主要关心的是性能。

PS - 我的桌子已经是第三范式了。

PS2 - 我使用的是 MS Sql Server 2008。

PS3 - 我不需要一次访问所有表数据,而是在该表中有 3 个不同类别的数据,我分别访问它们。它类似于:会员偏好、会员帐户、会员资料。

4

5 回答 5

15

80列真的不多……

从性能的角度来看,我不会担心它。拥有一个表(如果您通常在标准操作中使用所有数据)可能会胜过具有 1-1 关系的多个表,尤其是在您正确索引的情况下。

不过,从维护的角度来看,我会担心这个(可能)。单个表中的数据列越多,该表在您的宏伟计划中的作用就越难以理解。此外,如果您通常只使用一小部分数据,并且并不总是需要所有 80 列,则拆分为 2 个以上的表可能有助于提高性能。

于 2009-06-18T00:20:28.877 回答
7

关于性能问题 - 这取决于。行越大,一次读取可以从磁盘读取的行越少。如果您有很多行,并且您希望能够非常快速地从表中读取核心信息,那么可能值得将其拆分为两个表 - 一个只有可以快速读取的核心信息的小行,以及一个额外的表格,其中包含您很少使用的所有信息,您可以在需要时查找这些信息。

于 2009-06-18T00:24:51.660 回答
3

从维护和测试的角度来看,如果您说在一个表中有 3 个不同的数据组,尽管它们都具有相同的唯一 ID(例如 member_id),那么将其拆分为单独的表可能是有意义的.

如果您需要添加字段来说明成员信息表的个人资料详细信息部分,您是否真的要冒重新测试应用程序的首选项和帐户详细信息元素的风险,以确保不会产生影响。

如果您想跟踪最后一个用户 ID/时间戳以更改成员数据,也可用于审计跟踪。如果管理应用程序允许单独更新首选项/帐户详细信息/个人资料详细信息,那么将它们放在单独的表中以更轻松地跟踪更新是有意义的。

不是一个 SQL/Performance 答案,但也许可以从数据库和应用程序设计 pov 中看到

于 2009-06-18T00:47:02.660 回答
1

取决于这些列是什么。如果您有硬编码的重复字段,如 Colour1、Colour2、Colour3,那么这些是子表的候选者。我的一般经验法则是,如果有多个相同类型的字段(颜色),那么您最好为其中的 N 个进行编码,而不是一个固定的数字。

抢。

于 2009-06-18T00:20:29.517 回答
1

如果您说 Member_Info,1-1 可能会更容易;会员偏好;成员_个人资料。如果您想要大量的 varchar(255),那么拥有太多列可能会使其运行,因为您可能会超过行大小限制,这只会让人感到困惑。

只要确保你有正确的 forgein 键约束等等,所以每个表中总是有 1 行具有相同的 member_id

于 2009-06-18T00:21:43.477 回答