使用多个表而不是一个BIG表?

时间:2013-03-03 14:41:29

标签: mysql database innodb

使用InnboDB& amp;时将大表分成多个较小的表时,是否有优点或缺点? MySQL的? 我当然不是在谈论拆分实际的innoDB文件,我只是想知道当我使用多个表时会发生什么。

情形: 我有一个包含数百万行(项目)的真实大表,它们被分类(列“类别”)。 现在,我正在考虑为每个类别使用单独的表。 在任何情况下,我都不需要跨多个表的数据。

1 个答案:

答案 0 :(得分:0)

一般来说,如果您的表彼此无关,则它们应该位于单独的表中,而不是捕获所有表。

但是,如果它们相关,它们应该真正存在于一个表中。您可以通过多种方式管理大型表的性能。我建议你看一下partitioning the tables,如果它变得太大而开始引起问题。

然而,正如你所说,数百万行不是“真正的大桌子”,我们有许多表有数千万行,甚至有几千行有数亿 - 而且它们表现得很好,这要归功于切割器索引,分区和读取副本。

编辑1 - 回复评论:

在键值对中的每个键上创建动态表就像你正确地说不寻常,丑陋而且非常错误 - 你正在击败RDBMS的关系部分。 我不可能具体使用以下内容,因为您的架构和您想要实现的内容的详细信息仍然缺少这个问题 - 但是我觉得我已经掌握了足够的内容来编辑我的原始答案。

关于在同一数据库中对表进行分区并在另一个数据库中创建新表,存在着巨大的不同。您询问性能,一般来说它们应该执行相同的操作(即1000gb数据库中的新表和0gb数据库中的一个表),前提是您有足够的资源,例如用于索引的内存和基础数据存储上的IO,并且没有瓶颈。

我无法弄清楚为什么你想要创建动态表 (“table_ {category}”),或将值/类别存储在文本文件中。这听起来好像你需要一个1-N的关系和一个JOIN。