在MySQL中有一个大表或2个较小的表是否更好?

时间:2009-10-18 19:41:29

标签: sql mysql database-design data-modeling

这是我的情况:我有大约50个不同的数据字段,我需要存储1个记录(没有相同或重复)。大约15个字段是我通常需要在查询中使用的字段,而其余字段偶尔使用(约40%的查询)。

我应该设置2个表,一个包含公共字段,另一个包含不太常见的字段,并以1:1的关系连接它们?或者我应该把它们全部放在一张桌子上?

是否有任何优势,速度或其他方面,做一个或另一个?

3 个答案:

答案 0 :(得分:5)

假设您的表的行在逻辑上是单独的实体,并且所有字段都与实体相关,那么它们应该都在同一个表中。

但是,您可能有一个表,其中每行逻辑上是多个实体; 重构以便这是一个每个实体的实体通常称为规范化,或者这样的模式:规范化

规范化模式通常被认为是“正确的”,但在表之间进行连接时会考虑性能因素。

答案 1 :(得分:5)

两个表表示40%的查询有联接,60%表示没有联接。

您不能整体保存存储空间。

40%的查询速度较慢。

由于两个原因,60%的查询速度更快。 1)没有加入。 2)更少的物理数据块。

这种表现不同“重要”吗?这会让事情“变得更好”吗?

直到您更清楚地定义每个查询所花费的时间 - 并运行基准测试来衡量差异 - 这无关紧要。

在决定哪个“更好”之前,您必须实际构建和测量性能。

答案 2 :(得分:3)

主要是最小化NULL。如果您表中的其他35个字段通常为NULL,请考虑使用单独的表方法。如果它们通常是非NULL的,那么一个表可能就好了。