Mysql分区表Partition

1.背景:那是一个阳光明媚的日子。
为了提高大表(3510449行)的访问效率,我们决定对表进行拆分。

2.结合实际操作和业务,多条记录会集中在一个日期,而查询时往往只查询一个日期内的数据,因此选择分区字段为时间。

创建分区如CREATETABLEmessage_all(idint(10)NOTNULLAUTO_INCRMENT,...createtimedatetimeNOTNULLDEFAULTCURRENT_TIMESTAMPCOMMENT'创建时间'PRIMARYKEY(id,createtime))ENGINE=InnoDBANGEFAULTCHARBY=YR(YEARDEFAULTCHARSET=YEAR(YEAR)createtime))(PARTITIONp2015VALUESLESSTHAN(2016)ENGINE=InnoDB,PARTITIONp2016VALUESLESSTHAN(2017)ENGINE=InnoDB,PARTITIONp2017VALUESLESSTHAN(2018)ENGINE=InnoDB,PARTITIONp2018VALUESLESSTHANMAXVALUEENGINE=InnoDB)

但是当然我们已经有了表并且不能像这样构建它除非你想导入一次数据。
以下操作:1.ALTERTABLEmessage_allUESLESSTHAN(to_days('2018-01-01')),PARTITIONp2018VALUESLESSTHANMAXVALUE或2.ALTERTABLEmessage_allALTERTABLEmessage_allADDPARTITION(PARTITIONp2016VALUESLESSTHAN(YEAR('2017-01-01')),PARTITIONp2017VALUESLESSTHAN(YEAR('2018-01-01')),PARTITIONp2018VALUESLESSTHANMAXVALUE);

这里会有几个错误情况:1.可改变的message_allPARTITIONBYRANGE(to_days(createtime));[Err]1492-ForRANGEpartitionseachpartitionmustbedefine解释:必须至少指定一个分区。

2.[Err]1492-APRIMARYKEY必须包含表的分区函数中的所有列说明:分区字段必须是主键之一。

3.[Err]1492-(子)分区函数中的常量、随机或时区相关表达式不允许解释:分区字段是时间戳,请将其替换为日期时钟。

4.[Err]1526-Tablehasnopartitionforvaluexxxx解释:第一次相加时必须覆盖当前所有数据。

总结:1、创建时至少必须指定一个分区。
2.键必须是主键之一。
3.RANGE必须是INT类型,并且时间字段必须使用函数进行转换-YEAR()、YEARWEEK()、TO_DAYS()。
4.THAN必须是INT类型,并且时间字段必须使用函数TO_DAYS、TO_SECONDS()、UNIX_TIMESTAMP()进行转换。
5.它是一个文件除以两个INT的大小。
6.所有电机必须相同。
7.区域划分只能在最大值之后添加。
8.分区有上限,似乎是1024。

1SHOWTABLESTATUSLIKE'message_all';

2SELECT*FROMinformation_schema=WHEREtable_name=。
'message_all';

3ATETABLEmessage_all;

='2016-01-01'ANDcreatetime<'2016-12-30'。

5.指定分区查表SELECTCOUNT(1)FROMmessage_allPARTITION(p2016)aliasWHERE...;

到这里就结束了,土豆白了。

水平分区分区有以下几种模式

mysql删除分区

在MySQL中,删除分区操作是使用ALTERTABLE“表名”DROPPARTITION“分区名”语句来执行的。
该操作适合直接删除指定分区。
在执行删除分区操作之前,请确保分区数据为空,并且只保留分区结构,不删除数据。
您可以进行相应的操作。
如果需要恢复已删除的分区,可能无法直接执行添加分区命令,因为MySQL要求添加的分区必须在最后一个分区之后。
如果中间需要添加删除的分区,则需要删除所有后续分区,然后再次添加所需的分区,最后添加删除的分区之后的所有分区。
以sys_log系统表为例,我们每天可以自动删除90天前的分区,并创建4天后的分区。
首先,创建一个常规表,只做一次。
接下来,将普通表转换为分区表并执行一次相同的操作,维护当前的临时分区和未来的分区。
每天执行分区清理和创建操作,例如添加一天的新分区。
通过设置定时任务,每天执行一次分区操作,保证系统高效运行。

mysql分区清理后,需要索引收集吗

需要对常用分区表进行增删改查、分区等操作时,全局分区索引将失效。
创建索引时可以使用本地分区索引,稍后创建分区表索引时添加本地参数。
使用本地分区索引。
本地分区索引在分区表增删改分区时会自动维护索引,因此MySQL分区清理后需要索引池。
MySQL是瑞典公司MySQLAB开发的关系型数据库管理系统,是Oracle产品。