1

我知道 MySQL 通常可以很好地处理包含许多行的表。但是,我目前面临一个设置,一个表将由多个用户(大约 10 个)同时读取和写入,并且该表很可能包含 100 亿行。

我的设置是一个带有 InnoDB 存储引擎的 MySQL 数据库。

我有一些项目的心,在这些项目中,这种大小的表会变得效率降低和速度变慢,也涉及索引。

我不喜欢为了拆分行而拥有多个具有完全相同结构的表的想法。主要问题:但是,这不能解决由于如此多的行而导致性能下降的问题吗?

附加问题:我还能做些什么来处理这么大的桌子?行数本身不会减少。

4

1 回答 1

3

我听说过一些项目,在这些项目中,这种大小的表会变得效率更低、速度更慢,也涉及索引。

这不是典型的。只要您的表根据您使用它们的方式进行了适当的索引,即使对于非常大的表,性能也应该保持合理。

(随着 BTREE 索引深度的增加,索引性能会略有下降,但这种影响实际上可以忽略不计。此外,可以通过在索引中使用较小的键来减轻这种影响,因为这可以最大限度地减少树的深度。)

在某些情况下,更合适的解决方案可能是对表进行分区。这在内部将您的数据划分为多个表,但将它们公开为可以正常查询的单个表。但是,分区对表的索引方式提出了一些特定要求,并且不会从本质上提高查询性能。通过从按日期分区的表中删除较旧的分区,允许一次从表中删除大量较旧的数据主要有用。

于 2017-07-20T18:24:24.987 回答