MySQL 哈希分区
常规哈希分区
要对表进行哈希分区,必须在 create table
语句后附加一个子句,这个子句可以是一个返回整数的表达式,也可以是 MySQL 整数类型列的名称。
根据表中 store_id
列进行哈希分区,并分为4个分区,示例 SQL 语句如下:
mysql
create table employees (
id int not null,
fname varchar(30),
lname varchar(30),
hired date not null default '1970-01-01',
separated date not null default '9999-12-31',
job_code int,
store_id int
)
partition by hash(store_id)
partitions 4;
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
如果分区不包含 partition
子句,则分区数默认为1;如果分区语句包含 partition
子句,则必须在后面指定分区的数量,否则会提示语法错误。
哈希分区中,还可以使用为 SQL 返回整数的表达式,比如:
mysql
create table employees (
id int not null,
fname varchar(30),
lname varchar(30),
hired date not null default '1970-01-01',
separated date not null default '9999-12-31',
job_code int,
store_id int
)
partition by hash( year(hired) )
partitions 4;
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
线性哈希分区
MySQL 还支持线性哈希,它与常规哈希的不同之处在于:线性哈希使用线性二次幂算法,二常规哈希使用哈希函数值的模数。在语法上,线性哈希分区唯一区别于常规哈希的地方是在 partition by
子句中添加了 linear
关键字。
mysql
create table employees (
id int not null,
fname varchar(30),
lname varchar(30),
hired date not null default '1970-01-01',
separated date not null default '9999-12-31',
job_code int,
store_id int
)
partition by linear hash( year(hired) )
partitions 4;
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11