3

我们有一个表,它充当要处理的项目队列。此表有一个状态列,可以包含 0 或 1,以指示记录是否仍处于活动状态。该表目前有大约 4MM 行,并且会快速增长。

行的分布约为状态 = 0 的 5% 和状态 = 1 的 95%。典型查询仅查找状态 = 0 的记录。

随着表的增长,查询开始变慢。这是因为 MySQL 优化器没有在状态列上使用索引,因为它的基数太低。

我们正在考虑按状态列将表划分为 2 个分区。我们的想法是我们可以利用分区修剪,因此通常只需要分析总记录的 5%。我们仅出于存档原因保留 status=1 记录。

我的问题是这种方法是否会产生我正在寻找的预期效果,或者负面影响是否会超过好处?将行从 status=0 更新到 status=1 会导致性能问题吗?

4

1 回答 1

1

如果更新状态列的性能是一个问题,那么只创建一个单独的表来仅存储归档记录,然后在服务器的安静时间每隔一段时间安排将归档记录从原始表移动到这个归档表呢?

这样,在第一次迁移之后,您最终会得到更小的“活动”表,并且最终用户不会意识到将状态从“0”更改为“1”的 I/O 缓慢。

于 2012-07-05T07:11:43.877 回答