MySQL:何时分解/拆分表

时间:2014-04-24 02:31:58

标签: mysql sql rdbms

我正在建立一个数据库,我不确定我应该制作多么深的层次结构。

节省空间的最佳情况似乎是三层。 基团 - > sub_group->项目

在平均情景中,子组有300个项目,组有100个子组。项目目前接近100万,增长正在加速。

我喜欢区分GROUP和ITEM,因为它反映了现实世界,但SUB_GROUP仅存在,因为ITEM通常对于几百行是相同的。为了清楚起见,我可以在子组的一个实例中获取数据并将其附加到每个项目实例。

在每个查询中至少进行3次连接会更好地提高性能吗?或者我最好减少使用更多重复数据的表格?

2 个答案:

答案 0 :(得分:0)

这不是一个MySQL问题,而是一般的SQL RDBMS问题。

您已将数据库规范化,以消除重复并最大限度地减少存储。

如果符合以下条件,您可能会正确化并将子组信息与项目放在一起:

  1. 子组数据很小。
  2. 您经常同时查询子组和项目信息,并且查看不够。
  3. 实际上,您的性能问题会导致变更 - 不要过早优化。
  4. 可能还有其他一些注意事项,但是这一点可以让你开始。

    这里没有绝对的。

答案 1 :(得分:0)

首先,您的决定不应基于性能问题,检索数据所需的JOIN数量或任何相关问题。您应该选择正确为您的数据建模的设计。如果您使用关系数据库来存储数据,则意味着遵循数据规范化原则,独立于感知性能问题。完成此操作后,如果您无法实现所需的性能,则可以考虑使用有限的策略非规范化来获得所需的性能。但是,在大多数情况下,规范化解决方案也将是最高效的解决方案。

那就是说,我并不完全清楚" group"," sub-group"和" item"在现实世界中建模。但是,数据规范化的原则绝对规定items中多个记录的多列中的常见值应该被抽象为sub-group中的单个记录。目前尚不清楚的是,您是否可以使用三个表,或者是否有其他级别的分组需要进行规范化。