MySQL 一张表与多张表的性能对比
MySQL Performance of one vs. many tables
我知道 MySQL 通常可以很好地处理多行的 table。但是,我目前面临一个 table 将被多个用户(大约 10 个)同时读取和写入的设置,并且 table 很可能包含 100 亿行。
我的设置是带有 InnoDB 存储引擎的 MySQL 数据库。
我有一些项目的心,其中 table 那个大小的项目会变得效率低下和速度慢,也涉及索引。
我不喜欢让多个 table 具有完全相同的结构来拆分行的想法。 主要问题:但是,这不能解决由于大量行导致性能下降的问题吗?
附加问题:我还能做些什么来处理这么大的 table?行数本身是不会减少的。
I have heard of some projects where tables of that size would become less efficient and slower, also concerning indexes.
这不是典型的。只要您的 table 已针对您使用它们的方式进行了适当的索引,即使对于非常大的 table 来说,性能也应该保持合理。
(随着 BTREE 索引深度的增加,索引性能 非常轻微 下降,但这种影响几乎可以忽略不计。此外,可以通过使用较小的索引中的键,因为这可以最大限度地减少树的深度。)
在某些情况下,更合适的解决方案可能是 partitioning 您的 table。这在内部将您的数据分成多个 table,但将它们公开为单个 table,可以正常查询。但是,分区对 table 的索引方式提出了一些特定要求,并不能从本质上提高查询性能。通过删除按日期分区的 table 中的旧分区,允许一次性从 table 中删除大量旧数据非常有用。
我知道 MySQL 通常可以很好地处理多行的 table。但是,我目前面临一个 table 将被多个用户(大约 10 个)同时读取和写入的设置,并且 table 很可能包含 100 亿行。
我的设置是带有 InnoDB 存储引擎的 MySQL 数据库。
我有一些项目的心,其中 table 那个大小的项目会变得效率低下和速度慢,也涉及索引。
我不喜欢让多个 table 具有完全相同的结构来拆分行的想法。 主要问题:但是,这不能解决由于大量行导致性能下降的问题吗?
附加问题:我还能做些什么来处理这么大的 table?行数本身是不会减少的。
I have heard of some projects where tables of that size would become less efficient and slower, also concerning indexes.
这不是典型的。只要您的 table 已针对您使用它们的方式进行了适当的索引,即使对于非常大的 table 来说,性能也应该保持合理。
(随着 BTREE 索引深度的增加,索引性能 非常轻微 下降,但这种影响几乎可以忽略不计。此外,可以通过使用较小的索引中的键,因为这可以最大限度地减少树的深度。)
在某些情况下,更合适的解决方案可能是 partitioning 您的 table。这在内部将您的数据分成多个 table,但将它们公开为单个 table,可以正常查询。但是,分区对 table 的索引方式提出了一些特定要求,并不能从本质上提高查询性能。通过删除按日期分区的 table 中的旧分区,允许一次性从 table 中删除大量旧数据非常有用。