你的位置:首页 > 软件开发 > 数据库 > Mysql 表分区

Mysql 表分区

发布时间:2016-05-23 15:00:05
Mysql 表分区操作及相关操作 将ID设为自增长ID alter table pw_trade_record_temp change ID ID int(4) auto_increment; 分区字段必需为主键,修改主键 ALTER TABLE `pw_trad ...

Mysql 表分区操作及相关操作 将ID设为自增长ID 分区字段必需为主键,修改主键 ALTER TABLE `pw_trade_record` 直接在建表时创建表分区 创建range分区 create table emp (empno varchar(20) not null , empname varchar(20), deptno int, birthdate date, salary int ) partition by range(salary) ( partition p1 values less than (1000), partition p2 values less than (2000), partition p3 values less than maxvalue ); 以员工工资为依据做范围分区。 create table emp (empno varchar(20) not null , empname varchar(20), deptno int, birthdate date not null, salary int ) partition by range(year(birthdate)) ( partition p1 values less than (1980), partition p2 values less than (1990), partition p3 values less than maxvalue ); 以year(birthdate)表达式(计算员工的出生日期)作为范围分区依据。这里最值得注意的是表达式必须有返回值下载地址   。 创建list分区 create table emp (empno  varchar(20) not null , empname varchar(20), deptno  int, birthdate date not null, salary int ) partition by list(deptno) ( partition p1 values in  (10), partition p2 values in  (20), partition p3 values  in  (30) ); 以部门作为分区依据,每个部门做一分区。 创建hash分区 HASH分区主要用来确保数据在预先确定数目的分区中平均分布。在RANGE和LIST分区中,必须明确指定一个给定的列值或列值集合应该保存在哪 个分区中;而在HASH分区中,MySQL 自动完成这些工作,你所要做的只是基于将要被哈希的列值指定一个列值或表达式,以及指定被分区的表将要被分割成的分区数量下载地址 。 create table emp (empno varchar(20) not null , empname varchar(20), deptno int, birthdate date not null, salary int ) partition by hash(year(birthdate)) partitions 4; 创建key分区 按照KEY进行分区类似于按照HASH分区,除了HASH分区使用的用户定义的表达式,而KEY分区的哈希函数是由MySQL 服务器提供,服务器使用其自己内部的哈希函数,这些函数是基于与PASSWORD()一样的运算法则。“CREATE TABLE ...PARTITION BY KEY”的语法规则类似于创建一个通过HASH分区的表的规则。它们唯一的区别在于使用的关键字是KEY而不是HASH,并且KEY分区只采用一个或多个 列名的一个列表下载地址 。 create table emp (empno varchar(20) not null , empname varchar(20), deptno int, birthdate date not null, salary int ) partition by key(birthdate) partitions 4; create table emp (empno varchar(20) not null , empname varchar(20), deptno int, birthdate date not null, salary int ) partition by range(salary) subpartition by hash(year(birthdate)) subpartitions 3 ( partition p1 values less than (2000), partition p2 values less than maxvalue ); range- key复合分区 create table emp (empno varchar(20) not null , empname varchar(20), deptno int, birthdate date not null, salary int ) partition by range(salary) subpartition by key(birthdate) subpartitions 3 ( partition p1 values less than (2000), partition p2 values less than maxvalue ); list - hash复合分区 CREATE TABLE emp ( empno varchar(20) NOT NULL, empname varchar(20) , deptno int, birthdate date NOT NULL, salary int ) PARTITION BY list (deptno) subpartition by hash(year(birthdate)) subpartitions 3 ( PARTITION p1 VALUES in  (10), PARTITION p2 VALUES in  (20) ) ; list - key 复合分区 CREATE TABLE empk ( empno varchar(20) NOT NULL, empname varchar(20) , deptno int, birthdate date NOT NULL, salary int ) PARTITION BY list (deptno) subpartition by key(birthdate) subpartitions 3 ( PARTITION p1 VALUES in  (10), PARTITION p2 VALUES in  (20) ) ALTER TABLE `pw_trade_record` 删除分区(一次性可删除多个分区) 删除表的所有分区 合并表分区 分解表分区 查看分区表状态 Alter table emp partition by hash(salary)partitions 7;  ----不会丢失数据 重新定义range分区表: Alter table emp partitionbyrange(salary) ( partition p1 values less than (2000), partition p2 values less than (4000) ); ----不会丢失数据 这和先删除保存在分区中的所有记录,然后重新插入它们,具有同样的效果。它可用于整理分区碎片。 ALTER TABLE emp rebuild partitionp1,p2; 如果从分区中删除了大量的行,或者对一个带有可变长度的行(也就是说,有VARCHAR,BLOB,或TEXT类型的列)作了许多修改,可以使用“ALTER TABLE ... OPTIMIZE PARTITION”来收回没有使用的空间,并整理分区数据文件的碎片。 ALTER TABLE emp optimize partition p1,p2; 分析分区: 读取并保存分区的键分布。 ALTER TABLE emp analyze partition p1,p2; 修补分区: 修补被破坏的分区。 ALTER TABLE emp repairpartition p1,p2; 检查分区: 可以使用几乎与对非分区表使用CHECK TABLE 相同的方式检查分区。 ALTER TABLE emp CHECK partition p1,p2; 这个命令可以告诉你表emp的分区p1,p2中的数据或索引是否已经被破坏。如果发生了这种情况,使用“ALTER TABLE ... REPAIR PARTITION”来修补该分区。 


原标题:Mysql 表分区

关键词:MYSQL

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。