【问题标题】:A single huge table or many small ones一张大桌子或许多小桌子
【发布时间】:2011-09-25 08:10:31
【问题描述】:

我有一个将修改记录记录到表中的数据库。此修改表包含其他表的外键(修改表仅包含对修改对象的引用)。 此修改表中的对象可以分组到不同的群体中。当用户访问服务时,他只向数据库请求关于他的人口的对象。 我每周将有大约 2 到 10 个新种群。

  1. 智能手机经常请求此表,其中包含大约 500 000 / 1 000 000 条记录。
  2. 如果我将修改表拆分为多个表,则无需执行表连接来回答用户请求

如果我把这个单表改成多表,我想会加快响应时间。

但另一方面,修改表中的每个“插入”都需要首先具有目标表的名称(这意味着另一个请求)。为此,我计划在“人口”表中有一个列,其中一个 varchar 表示要修改的目标表。

我的问题是设计模式/架构问题 --> 我应该选择一个非常大的桌子,每个请求都有 3 个“位置”,还是应该尝试许多没有“位置”的轻型桌子玩吗?

【问题讨论】:

    标签: database database-design architecture


    【解决方案1】:

    500K - 100 万条记录并非微不足道 - 但它当然也不大。你的数据库平台是什么?大多数主流专业平台(SQL、Oracle、MySQL 等)都能够处理这个问题。

    如果所讨论的表很窄(列数很少),那么与包含很多列的“宽表”相比,它不太可能成为问题。

    有很多连接可能是一个问题(我只是不能根据经验说话)。根据您管理事物的方式(以及您的应用程序代码有多好),您真的需要外键约束吗?

    【讨论】:

    • 外键从不可选。
    • 事实上,这个表只是一种在一个表中列出其他表中所有更改的方法。外键允许指向表中的正确记录
    • @a_horse_with_no_name - 就事务系统而言,我同意你的 %99;总是有有效的例外。报告场景呢?非规范化表等?
    【解决方案2】:

    最干净的方法是使用一张桌子并在人口上使用partition。为此进行了分区。

    【讨论】:

      猜你喜欢
      • 2011-11-17
      • 2011-05-04
      • 2017-02-07
      • 2018-04-09
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 2011-07-16
      • 1970-01-01
      相关资源
      最近更新 更多