Mic*_*ael 5 mysql myisam partitioning dynamic unix-timestamp
我的数据库设计包括多个MYISAM表,在线收集测量数据,
每行记录包含自动递增的id,一些数据和表示unixtime的整数.
我正在设计一个老化机制,我有兴趣使用MySQL分区动态地基于unixtime对每个这样的表进行分区.
假设我感兴趣的是每个分区将代表单个月的数据,最后一个分区应该代表2个月,如果记录到达下一个未表示的月份,代表2个月的分区应该重新组织以代表单个月,并且新分区应该创建代表2个月(1个从最后一个分区获取,1个用于将来的测量),
此外,当创建新分区时,我感兴趣的是将丢弃最旧的分区.
更新12.12.12
我找到了有趣的链接到类似的方法,我已经描述了你的魔法范围分区维护查询.
分区不需要仅基于唯一键.但是,如果存在唯一键,则它应包含在用于对表进行分区的列中.要在UNIXTIME列上分区表,请执行以下操作:
ALTER TABLE MyTable
PARTITION BY RANGE COLUMNS (UNIX_TIMESTAMP(datetime_column))
(
PARTITION p01 VALUES LESS THAN (2),
PARTITION p02 VALUES LESS THAN (3),
PARTITION p03 VALUES LESS THAN (4),
PARTITION p04 VALUES LESS THAN (MAXVALUE));
Run Code Online (Sandbox Code Playgroud)
或者你可以在MySQL 5.5+中对datetime列进行分区:
ALTER TABLE MyTable
PARTITION BY RANGE COLUMNS (datetime_column)
(
PARTITION p01 VALUES LESS THAN ('2013-01-01'),
PARTITION p02 VALUES LESS THAN ('2013-02-01'),
PARTITION p03 VALUES LESS THAN ('2013-03-01'),
PARTITION p04 VALUES LESS THAN (MAXVALUE));
Run Code Online (Sandbox Code Playgroud)完全自动化的版本(每月保留在自己的分区中,保存5个月的数据):
ALTER TABLE MyTable
PARTITION BY RANGE COLUMNS (YEAR(datetime_column)*100 + MONTH(datetime_column))
(
PARTITION p201301 VALUES LESS THAN (201301),
PARTITION p201302 VALUES LESS THAN (201302),
PARTITION p201303 VALUES LESS THAN (201303),
PARTITION p201304 VALUES LESS THAN (201304),
PARTITION p201305 VALUES LESS THAN (201305),
PARTITION p_MAXVALUE VALUES LESS THAN (MAXVALUE));
DECLARE @Min_Part int
DECLARE @Last_Part int
DECLARE @SQL varchar (1000)
If (select count (distinct MONTH(datetime_column)) from MyTable) > 5 THEN
BEGIN
select @Min_Part = (select min(year(datetime_column)*100 + month(datetime_column)) from MyTable),
@Last_Part = (select max(year(datetime_column)*100 + month(datetime_column)) from MyTable)
set @SQL = 'Alter table MyTable REORGANIZE PARTITION p_MAXVALUE (into partition p' +TO_CHAR (@Last_Part) + 'values less than (' + TO_CHAR (@Last_Part) + ')'
call common_schema.eval (@sql)
set @SQL = 'Alter table MyTable DROP PARTITION p' + TO_CHAR (@Min_Part)
call common_schema.eval (@sql)
END
Run Code Online (Sandbox Code Playgroud)PS道歉,如果SQL不完全正确 - 现在无法解析它.
归档时间: |
|
查看次数: |
7462 次 |
最近记录: |