输入banner图图片脚本导航/分类

Mysql 表分区技术



将ID设为自增长ID 
alter table pw_trade_record_temp change ID ID int(4) auto_increment; 

分区字段必需为主键,修改主键 

ALTER TABLE `pw_trade_record` 
DROP PRIMARY KEY, 
ADD PRIMARY KEY (`ID`, `TRADE_TIME`); 

直接在建表时创建表分区 

创建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; 


创建复合分区 


range - hash(范围哈希)复合分区 

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,