我们有一个表,它充当要处理的项目队列。此表有一个状态列,可以包含 0 或 1,以指示记录是否仍处于活动状态。该表目前有大约 4MM 行,并且会快速增长。
行的分布约为状态 = 0 的 5% 和状态 = 1 的 95%。典型查询仅查找状态 = 0 的记录。
随着表的增长,查询开始变慢。这是因为 MySQL 优化器没有在状态列上使用索引,因为它的基数太低。
我们正在考虑按状态列将表划分为 2 个分区。我们的想法是我们可以利用分区修剪,因此通常只需要分析总记录的 5%。我们仅出于存档原因保留 status=1 记录。
我的问题是这种方法是否会产生我正在寻找的预期效果,或者负面影响是否会超过好处?将行从 status=0 更新到 status=1 会导致性能问题吗?