mysql - 表分区与“手动”表分区

时间:2014-02-21 10:07:22

标签: php mysql sql

我有以下选择:

我有一个巨大的表(9999999999999行),我们称之为tableHuge,我想将其拆分为多个表(以优化查询)。此表包含日期(每月的几天),并且大多数查询是使用指定的月份作为select中的搜索键。这引出了以下选择:

选择一: 将表拆分为多个表,使用一个月作为尾巴(如lessHugeTable_01,lessHugeTable_02等)。然后我可以在我的应用程序中小心访问我需要的表。主要的缺点是失去加入的能力,包括超过一个月的情况(或加入工会......好......并发症)。

选择二: 使用表分区。

由于我以前从未使用过分区(所以我没有比较的知识),我想要一些关于如何做的建议,如果可能的话有利有弊(除了明显的事情,比如“如果你的手动分区表被破坏了你只丢失那些数据,而在表格部分你松散整个数据“)。

感谢您的时间。

1 个答案:

答案 0 :(得分:3)

这里的答案真的是“依赖”。

更具体地说,它取决于数据的性质,访问数据的方式以及访问数据的方式。

从声音来看,你可能最好选择一年分为月份的表格。我在这里做了一些疯狂的假设,你需要不那么频繁/永远地访问旧数据,因此可以将其存档以保持主表中的数据量(就像我说“依赖”!);

如果您的表是,并且将始终由一个应用程序访问,您可以构建逻辑来处理您的“尾部”命名约定,那么您可能希望沿着多个表路由。

以下是我看到利弊堆积的方式:

多个表优点

  1. 如果只选择一个月的数据,则表格较小
  2. Errr。我只能想到一个
  3. 多个表缺点

    1. 查询/更新多月数据集的难度
    2. 如果从二月份表中的一月份获得数据,会发生什么? “但它永远不会发生!”真?真的吗?!
    3. 如果多个应用程序需要访问这些表,那么它们都必须具有“尾部”命名约定逻辑,即lessHugeTable_02具有来自二月的数据。
    4. 现在正在分区:

      分区表专业人员

      1. 您正在让MySQL为您处理数据分片。因此,您的应用程序中不需要“本月=此表”逻辑
      2. 没有1月数据进入二月表的风险
      3. 由于您拥有单个逻辑(如果不是物理)表
      4. ,因此加入变得更加容易
      5. 如果您使用的是MySQL 5.5或更高版本,那么您可以truncate partitions。非常方便您可能想要的任何家务管理
      6. 分区表缺点

        1. 您可能要查询的数据集要大得多。如果您运行跨越多个分区的查询,那么可能需要一段时间。 明智地选择您的分区键!
        2. 可能更多,但我已经没时间和疯狂的假设!
        3. PS对某些要点[{3}}

          有一个很好的答案
相关问题