MySQL:规范化,这是一个有效的例外吗?

时间:2012-04-26 13:24:39

标签: mysql performance use-case denormalization

我们有10年的存档体育数据,分布在不同的数据库中。

尝试将所有数据合并到一个数据库中。由于我们处理的记录数量是10倍,因此我现在尝试对架构进行重新设计更改以避免潜在的性能损失。

一项改变需要将团队名单分成2个表格;一,存储固定数据的玩家表:playerID,firstName,lastName,birthDate等,另一个是存储玩家可变数据的新名册表:yearInSchool,jerseyNumber,position,height,weight等。这将除其他外,允许我们创建职业生涯4年的球员统计数据总结。

公平,有道理,但话说回来,当我查看相关的查询时,例如,玩家聚合得分统计数据,我必须加入两个播放器&除了得分和时间表之外,还有名册表,以便获得所需的所有信息。

我考虑非规范化的地方是玩家的名字和姓氏。如果我在名单表中存储玩家的名字和姓氏,那么我可以从统计查询的等式中省略玩家表格,我假设这将是一个很大的表现胜利,因为每张桌子的总记录数将超过100K(即大多数查询连接将跨越每个包含至少100K记录的表,并且最多包含300K记录。

那么,在这种情况下,在哪里绘制具有非规范化的行?我假设复制第一个,姓可以。一般来说,我喜欢非重复/完整的数据,但我怀疑网站访问者更喜欢表现!

1 个答案:

答案 0 :(得分:2)

首先想到的是,你确定你已经用尽了调优选项来获得良好的SELECT性能而不会在这里进行非规范化吗?

我非常喜欢你,没有神圣的奶牛和#34;并在必要时进行非规范化处理,但这听起来似乎不应该难以获得不错的表现。

当然,你们已经做了自己的探索,如果你们已经做出裁决,那么个人意见是否可以接受,是的。

一个问题 - 如果玩家的名字发生变化会怎样?它可以在你的系统中这样做吗?您是否会使用转换在单个COMMIT操作中更新所有名单详细信息?对于历史记录Db,这可能与你完全无关。