我有一张约190万行的表并且一直在增长。我针对这些数据运行了一些相当复杂的查询。活动数据通常聚集在表的末尾 - 也就是说,只有最近n%的记录倾向于定期访问,尽管其他数据需要在同一个表中可用人们回顾旧记录的不太常见的情况。
对于那些在MySQL中具有分区经验的人来说,这个表看起来好像是分区的好选择吗?或者它太小而无法获得多少收益?
谢谢,
贾里德
P.S。我在stackoverflow上寻找一个问题来回答这个问题,但没有找到任何合适的东西。
答案 0 :(得分:1)
查看这篇文章......他在一个只有3列和800K记录的表上显示了显着的收益。只要在产生整数或NULL的列上进行分区,您就会看到一些很好的性能改进。我喜欢基于日期的分区所带来的速度提升,我看到的记录显着减少,但列数更多。
答案 1 :(得分:1)
逻辑上,是的,如果您通常运行只需要最近2%表的查询,那么这将是分区的理想选择。
使用MySQL分区的最大障碍是用于分区键的列必须是主键和任何其他唯一键的一部分。这实际上使得一些表不可能进行分区。
如果这阻止您对表进行分区,则回退计划是“手动”分区。也就是说,制作两个结构相同的真实表格。每周(或您想要的任何计划),运行批处理作业以将旧数据迁移到第二个表。您可以随时创建一个VIEW,它是两个表的UNION,以防您需要偶尔运行表扫描。
答案 2 :(得分:0)
表大小应大于5 GB。 您应该参加RANGE PARTITIONING ...(每月或每年)