您是否应该在不断变化的状态列上使用 MySQL 分区



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

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

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

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

我的问题是,这种方法是否会产生我正在寻找的预期效果,还是负面影响大于收益? 将行从状态 = 0 更新为状态 = 1 会导致性能问题吗?

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

这样,在第一次迁移之后,您最终将得到更小的"活动"表,并且最终用户无法实现将状态从"0"更改为"1"的 I/O 缓慢。

相关内容

  • 没有找到相关文章

最新更新