mysql - 在将其分解为多个表之前,MySQL 表应该有多大?

标签 mysql performance

问题:我们有一张很大的 table ,而且还在增长。它的大部分条目(比如 80%)是很少查询的历史数据(“DATE”字段在当前日期之后),而其中的一小部分(比如 20%)是当前数据(“DATE”字段在当前日期之后),大多数查询搜索这些当前条目。

考虑两种可能的场景,哪一种会更好(考虑整体实现难度和性能,...)

  1. 将大表分成两个表:历史数据和当前数据。并且我每天将过期日期的记录从当前表移至历史表。

  2. 在一个表中保存记录(DATA 字段定义为 INDEXED)。

场景 A 表示实现和维护工作更加繁琐,并且每天在表之间移动日期时重载,而场景 B 表示搜索大型数据库(尽管已编入索引)。它会带来内存问题吗?推荐哪个场景?还有其他推荐吗?

最佳答案

您通常不想将一个大表分成多个表,尽管拥有一个当前表和一个历史表是完全合理的。你的过程是有道理的。然后,您可以根据查询需要优化当前表。我可能会选择两个表(鉴于您提供的信息有限),因为它允许进行此类优化。

但是,不要拆分历史数据。相反,使用分区。查看documentation .一个警告:查询需要在 where 子句中指定分区键以利用分区。对于一张大 table ,这无论如何都是典型的。

关于mysql - 在将其分解为多个表之前,MySQL 表应该有多大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33056281/

相关文章:

mysql - 导入 CSV 从现有表中提取一列字段

python - 对 Pandas 数据框中的每一行进行排序的最快方法

performance - UNION ALL 耗时太长

angular - Nativescript 6 非常慢

php - 如何加速笛卡尔的 MySQL 查询

php - 当从表中添加/删除列时,如何更新 mysql View ?

php - 如何显示主要成员(member)列表和次要成员(member)详细信息

mysql - 如何将mysql表中的数据加载到cloudera中(使用virtual box启动)

ruby-on-rails - Rails 性能分析器

java - jdbc 性能