0

使用 InnboDB & MySQL 时,将大表拆分为多个较小的表有优势还是劣势?当然,我不是在谈论拆分实际的 innoDB 文件,我只是想知道当我使用多个表时会发生什么。

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

4

1 回答 1

0

一般来说,如果您的表格彼此没有相关性,则它们应该位于单独的表格中,而不是一个包罗万象的表格。

但是,如果它们是相关的,它们实际上应该位于一个表中。您可以通过多种方式管理大型表的性能。如果表格变得太大以至于开始导致问题,我建议您查看对表格进行分区。

但是,数百万行并不是您所说的“真正的大表”,我们有许多具有数千万行的表,甚至有一些具有数亿行的表-由于混合了切刀索引,它们的性能很好,分区和只读副本。

编辑 1 - 回应评论:

正如您正确地说的那样,在键值对中的每个键上创建动态表是不寻常、丑陋且非常错误的——您正在击败 RDBMS 的关系部分。我无法具体说明以下内容,因为这个问题仍然缺乏您想要实现的架构和详细信息 - 但是我觉得我掌握的足够多,可以编辑我的原始答案。

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

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

于 2013-03-03T15:09:22.550 回答