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