MySql数据分区的那些坑

本文介绍了MySQL中表分区的方法,包括范围分区等,并提供了具体的SQL示例代码。此外还分享了数据迁移及备份还原的实用技巧。

举个例子:

CREATE TABLE People
(
	PersonId INTEGER NOT NULL AUTO_INCREMENT,
	FirstName VARCHAR(50) NOT NULL,
	LastName VARCHAR(50) NOT NULL,
	DateOfBirth DATE NOT NULL,
	Telephone VARCHAR(30) NULL,
	Email VARCHAR(200) NULL,
	GroupId SMALLINT NOT NULL,
	PRIMARY KEY (PersonId, GroupId)
)
PARTITION BY RANGE (GroupId)
(
	PARTITION p0 VALUES LESS THAN (100),
	PARTITION p1 VALUES LESS THAN (200),
	PARTITION p2 VALUES LESS THAN (300),
	PARTITION p3 VALUES LESS THAN (400),
	PARTITION p4 VALUES LESS THAN (500),
	PARTITION p5 VALUES LESS THAN (600),
	PARTITION p6 VALUES LESS THAN (700)
);


问题有很多情况,建议以官方的文档那个为主,写例子的时候一定要看清楚了再写,如果出现问题,参考一下三点:

1.ENGINE=InnoDB DEFAULT CHARSET=utf8后面没有分号
分区需要注意,分区键包含在唯一键或者不含唯一键
3.mysql不同版本的分区函数使用,函数是否存在


表分区的时候,如果是hash分区,最好选择11,13,17来切分最佳

http://blog.youkuaiyun.com/u014386474/article/details/51802579

http://bbs.youkuaiyun.com/topics/390857704



数据迁移技巧:

select into from 和 insert into select都是用来复制表,两者的主要区别为: select into from 要求目标表不存在,因为在插入时会自动创建。insert into select from 要求目标表存在

备份表数据: create table emp as select * from scott.emp
还原表数据:insert into emp select * from scott.emp

1. 复制表结构及其数据
create table table_name_new as select * from table_name_old
2. 只复制表结构:
create table table_name_new as select * from table_name_old where 1=2;
或者:
create table table_name_new like table_name_old
3. 只复制表数据:
如果两个表结构一样:
insert into table_name_new select * from table_name_old
如果两个表结构不一样:
insert into table_name_new(column1,column2...) select column1,column2... from table_name_oldpasting


<think>嗯,用户问的是关于分区表删除分区的操作。首先,我需要回想一下数据库系统中分区表的基本概念,尤其是删除分区的步骤和注意事项。分区表通常用于管理大量数据,按时间、范围或列表等方式划分,提升查询性能和数据维护效率。 接下来,用户可能想知道如何具体执行删除分区的操作。不同的数据库系统可能有不同的语法,比如MySQL、Oracle和PostgreSQL。需要分别说明这些系统的命令,但用户可能使用的是其中某一个,所以需要涵盖常见的几种情况。 然后,删除分区时有哪些注意事项呢?比如数据丢失的风险,是否需要备份,删除分区对索引的影响,以及是否有锁表的情况发生。此外,可能还要提到分区依赖或外键约束的问题,这些都是用户在实际操作中可能遇到的。 用户身份可能是数据库管理员或开发人员,他们需要维护数据库的性能和数据管理。真实需求可能是在进行数据清理或调整分区结构,所以需要强调备份的重要性,避免误删数据。深层需求可能包括如何高效地管理分区,确保系统稳定运行。 需要分步骤说明操作,例如确认分区名称、执行删除命令、验证结果。同时要给出示例,帮助用户更直观地理解。对于不同的数据库系统,语法差异要明确,比如MySQL使用ALTER TABLE ... DROP PARTITION,而PostgreSQL可能需要使用DROP TABLE或者特定的分区管理扩展。 最后,总结删除分区的适用场景,比如历史数据清理、存储优化等,并再次提醒注意事项,确保用户操作安全。可能还需要提到权限问题,执行操作的用户需要有相应的权限,这也是实际操作中容易忽视的一点。</think>分区表删除分区的原理及操作步骤详解: 一、基本概念 $$ \text{分区表} = \bigcup_{i=1}^{n} \text{分区}_i $$ 每个分区可独立管理,删除分区相当于执行集合运算: $$ \text{新表} = \text{原表} - \text{目标分区} $$ 二、操作步骤(以MySQL为例) 1. 查看分区结构 ```sql SHOW CREATE TABLE 表名; ``` 2. 确认删除影响(数据将永久丢失) $$ \text{影响行数} = \sum_{k \in \text{目标分区}} \text{行数}_k $$ 3. 执行删除命令 ```sql ALTER TABLE 表名 DROP PARTITION 分区名称; ``` 4. 验证结果 ```sql SELECT PARTITION_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = '表名'; ``` 三、注意事项 1. 范围分区边界条件: $$ \text{删除分区} \Rightarrow \text{后续分区值域需满足} \quad \forall x \in \text{剩余分区}, x > \text{已删除分区最大值} $$ 2. 索引维护 $$ \text{全局索引} \rightarrow \text{需要重建} \quad \text{局部索引} \rightarrow \text{自动维护} $$ 四、多数据库语法对比 1. Oracle ```sql ALTER TABLE 表名 DROP PARTITION 分区名 UPDATE GLOBAL INDEXES; ``` 2. PostgreSQL(使用分区扩展) ```sql DROP TABLE 分区表名; ``` 五、适用场景 $$ \frac{\text{历史数据}}{\text{存储空间}} \geq \text{阈值} \quad \text{或} \quad \text{数据生命周期结束} $$ 六、风险提示 1. 数据不可逆删除:建议先执行 ```sql CREATE TABLE 备份表 AS SELECT * FROM 原表 WHERE 分区条件; ``` 2. 业务影响评估: $$ T_{\text{删除时间}} \propto \frac{\text{分区数据量}}{\text{磁盘IO速度}} $$ 注:具体语法请以实际数据库版本文档为准,生产环境建议先在测试环境验证。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值