我有一个运行良好的生产 MySQL 5.1 数据库,但我想提高查询性能。我从来没有使用过分区,只是浏览了手册。
我有两个表涉及列上的复合键:
Bill_Num Bill_Date
我想在 Bill_Date 创建分区。该表包含四年的记录。我想知道新的分区表将如何适应未来几年?我还想知道是否需要对现有查询中的表名进行更改,并将表名替换为新的分区表名?
我有一个运行良好的生产 MySQL 5.1 数据库,但我想提高查询性能。我从来没有使用过分区,只是浏览了手册。
我有两个表涉及列上的复合键:
Bill_Num Bill_Date
我想在 Bill_Date 创建分区。该表包含四年的记录。我想知道新的分区表将如何适应未来几年?我还想知道是否需要对现有查询中的表名进行更改,并将表名替换为新的分区表名?
我相当肯定,根据 5.1 文档,您必须更改表添加分区才能处理未来几年。
完成此设置后,您是否需要使用“旧”表?如果没有,我将按照以下步骤操作:
INSERT INTO mytable_new SELECT * FROM mytable
RENAME TABLE mytable TO mytable_old
RENAME TABLE mytable_new TO mytable
这应该避免更改查询的需要。如果您的表的写入量非常大(如果您需要对它进行分区,我认为它一定是这样!),您可能希望有一个维护时间范围,在该时间范围内它处于脱机状态,直到操作完成。
希望这可以帮助。
我最近在一个 MySQL 数据库系统上工作,该系统有许多表运行到数十亿行数据中,这在使用上是相当繁重的。我的一个小优势是表格只需要包含大约 5 年的数据——这让我开始思考。我可以创建一个分区方案,让年份在分区的末尾很好地包装吗?我还有一个优势,即执行的许多查询都是针对季度或年度数据的——无论是日历还是财务。
我能想到的是针对日期字段的以下分区函数 - 这确实需要在主键中包含日期字段,但这对于它产生的好处来说并不是什么困难......
这将创建一系列 24 个分区,每个分区包含连续 3 个月的数据,跨越六年。任何访问单个季度数据(1 月到 3 月)的查询都只能访问一个分区。大多数写入也针对单个分区。
随着岁月的流逝,回到开头,早期分区包含的数据比其他分区多,直到最早的数据从表中剔除,导致它们回落到与其兄弟姐妹相同的粗略行数.
希望这对某人有帮助吗?
戴夫