Mysql --分区表(7)Key分区
来源:互联网 发布:gamecenter数据不同步 编辑:程序博客网 时间:2024/05/29 14:31
Key分区
按照Key进行分区非常类似于按照Hash进行分区,只不过Hash分区允许使用用户自定义的表达式,而Key分区不允许使用用户自定义的表达式,需要使用MySQL服务器提供的HASH函数;同时Hash分区只支持整数分区,而Key分区支持使用BLOB或Text类型外其他类型的列作为分区键
我们同样可以使用Partition by key(expr)子句来创建一个key分区表,expr是零个或者多个字段名的列表。下面语句创建了一个机遇job字段进行分区的表,表被分成了4个分区
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 VARCHAR(30) NOT NULL, store_id INT)PARTITION BY KEY(job)PARTITIONS 4;
与HASH分区不同,创建Key分区表的时候,可以不指定分区键,默认会首先选择使用主键作为分区键
CREATE TABLE k1 ( id INT NOT NULL PRIMARY KEY, name VARCHAR(20))PARTITION BY KEY()PARTITIONS 2;
在没有主键的情况,会使用非空唯一键作为分区键
CREATE TABLE k1 ( id INT NOT NULL, name VARCHAR(20), UNIQUE KEY (id))PARTITION BY KEY()PARTITIONS 2;
如果作为分区键的唯一键不是非空的(没有指定NOT NULL子句),依然会报错
CREATE TABLE k1 ( id INT , name VARCHAR(20), UNIQUE KEY (id))PARTITION BY KEY()PARTITIONS 2;ERROR 1488 (HY000): Field in list of fields for partition function not found in table
如果即没哟主键,也没有唯一键,就必须要指定分区键了
例子
CREATE TABLE members ( firstname VARCHAR(25) NOT NULL, lastname VARCHAR(25) NOT NULL, username VARCHAR(16) NOT NULL, email VARCHAR(35), joined DATE NOT NULL)PARTITION BY KEY(joined)PARTITIONS 6;delimiter $$drop procedure if exists pr_insertdate$$create procedure pr_insertdate(in begindate date,in enddate date)begin while begindate<enddate do insert into members values('fan','boshi','duyalan',null,begindate); set begindate = date_add(begindate,interval 1 day); end while;end$$delimiter ;mysql> call pr_insertdate('2015-01-01','2016-08-08');Query OK, 1 row affected (0.06 sec)mysql> select count(*) from members;+----------+| count(*) |+----------+| 585 |+----------+1 row in set (0.00 sec)select partition_name part, partition_expression expr, partition_description descr, table_rows from information_schema.partitions where table_schema = schema() and table_name='members';+------+----------+-------+------------+| part | expr | descr | table_rows |+------+----------+-------+------------+| p0 | `joined` | NULL | 177 || p1 | `joined` | NULL | 0 || p2 | `joined` | NULL | 208 || p3 | `joined` | NULL | 0 || p4 | `joined` | NULL | 200 || p5 | `joined` | NULL | 0 |+------+----------+-------+------------+6 rows in set (0.00 sec)然而根据我的实验这种分区貌似没什么卵子用,p1 p3 p5都用不上。这种分区方法也不能很好地利用分区裁剪特性
0 0
- Mysql --分区表(7)Key分区
- MySQL分区表--key分区
- MySQL分区表--hash分区
- Mysql分区技术 --创建分区表
- Mysql --分区表(5)Columns分区
- Mysql --分区表(6)Hash分区
- MySQL分区表--列范围分区
- MySQl分区表小结-------RANGE分区
- mysql KEY分区
- MySQL Key分区表创建方法介绍
- MySQL分区表例子——Hash分区
- mysql分区表,循环分区,触发器自动删除
- MySQL key分区(五)
- MySQL表分区(4)key分区-key
- 通过shell脚本自动增加mysql分区表的分区
- 分区表和分区索引
- 分区表和分区索引
- 分区函数和分区表
- 1001: 图像旋转问题
- 第二十二章 Additional Topics in Modern Rendering
- nbtscan之类的SMB枚举工具用法
- 几个流行框架的简要介绍(一)
- Android——ViewPager+Fragment+ListView之间
- Mysql --分区表(7)Key分区
- mysql导入、导出文件
- python编程(3):数据结构
- 动态规划-最长非降子序列
- python 多线程编程并不能真正利用多核的CPU
- OJ-----合法IP*
- Import Legacy CCSv3.3 Project到CCS5.5.0时出错
- 剑指Offer——网易笔试之解救小易——曼哈顿距离的典型应用
- Android应用生死轮回的那些事儿(1) - installd初探