mysql分区基础操作
来源:互联网 发布:ps淘宝调色 编辑:程序博客网 时间:2024/05/22 15:20
自5.1开始对分区(Partition)有支持= 水平分区(根据列属性按行分)=* Range(范围) – 这种模式允许DBA将数据划分不同范围。例如DBA可以将一个表通过年份划分成三个分区,80年代(1980's)的数据,90年代(1990's)的数据以及任何在2000年(包括2000年)后的数据。 * Hash(哈希) – 这中模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区,。例如DBA可以建立一个对表主键进行分区的表。 * Key(键值) – 上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。 * List(预定义列表) – 这种模式允许系统通过DBA定义的列表的值所对应的行数据进行分割。例如:DBA建立了一个横跨三个分区的表,分别根据2004年2005年和2006年值所对应的数据。 * Composite(复合模式) - 很神秘吧,哈哈,其实是以上模式的组合使用而已,就不解释了。举例:在初始化已经进行了Range范围分区的表上,我们可以对其中一个分区再进行hash哈希分区。 = 垂直分区(按列分)=举个简单例子:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时候就要把这些不经常使用的text和BLOB了划分到另一个分区,在保证它们数据相关性的同时还能提高访问速度。range 分区:CREATE TABLE users ( uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL DEFAULT '', email VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY RANGE (uid) ( PARTITION p0 VALUES LESS THAN (3000000) DATA DIRECTORY = '/data0/data' INDEX DIRECTORY = '/data1/idx', PARTITION p1 VALUES LESS THAN (6000000) DATA DIRECTORY = '/data2/data' INDEX DIRECTORY = '/data3/idx', PARTITION p2 VALUES LESS THAN (9000000) DATA DIRECTORY = '/data4/data' INDEX DIRECTORY = '/data5/idx', PARTITION p3 VALUES LESS THAN MAXVALUE DATA DIRECTORY = '/data6/data' INDEX DIRECTORY = '/data7/idx');在这里,将用户表分成4个分区,以每300万条记录为界限,每个分区都有自己独立的数据、索引文件的存放目录,与此同时,这些目录所在的物理磁盘分区可能也都是完全独立的,可以提高磁盘IO吞吐量。list 分区:CREATE TABLE category ( cid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY LIST (cid) ( PARTITION p0 VALUES IN (0,4,8,12) DATA DIRECTORY = '/data0/data' INDEX DIRECTORY = '/data1/idx', PARTITION p1 VALUES IN (1,5,9,13) DATA DIRECTORY = '/data2/data' INDEX DIRECTORY = '/data3/idx', PARTITION p2 VALUES IN (2,6,10,14) DATA DIRECTORY = '/data4/data' INDEX DIRECTORY = '/data5/idx', PARTITION p3 VALUES IN (3,7,11,15) DATA DIRECTORY = '/data6/data' INDEX DIRECTORY = '/data7/idx'); hash 分区:CREATE TABLE users ( uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL DEFAULT '', email VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY HASH (uid) PARTITIONS 4 ( PARTITION p0 DATA DIRECTORY = '/data0/data' INDEX DIRECTORY = '/data1/idx', PARTITION p1 DATA DIRECTORY = '/data2/data' INDEX DIRECTORY = '/data3/idx', PARTITION p2 DATA DIRECTORY = '/data4/data' INDEX DIRECTORY = '/data5/idx', PARTITION p3 DATA DIRECTORY = '/data6/data' INDEX DIRECTORY = '/data7/idx');key 分区:CREATE TABLE users ( uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL DEFAULT '', email VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY KEY (uid) PARTITIONS 4 ( PARTITION p0 DATA DIRECTORY = '/data0/data' INDEX DIRECTORY = '/data1/idx', PARTITION p1 DATA DIRECTORY = '/data2/data' INDEX DIRECTORY = '/data3/idx', PARTITION p2 DATA DIRECTORY = '/data4/data' INDEX DIRECTORY = '/data5/idx', PARTITION p3 DATA DIRECTORY = '/data6/data' INDEX DIRECTORY = '/data7/idx'); range-hash 分区:CREATE TABLE users ( uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL DEFAULT '', email VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY RANGE (uid) SUBPARTITION BY HASH (uid % 4) SUBPARTITIONS 2( PARTITION p0 VALUES LESS THAN (3000000) DATA DIRECTORY = '/data0/data' INDEX DIRECTORY = '/data1/idx', PARTITION p1 VALUES LESS THAN (6000000) DATA DIRECTORY = '/data2/data' INDEX DIRECTORY = '/data3/idx');range-key 分区:CREATE TABLE users ( uid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) NOT NULL DEFAULT '', email VARCHAR(30) NOT NULL DEFAULT '')PARTITION BY RANGE (uid) SUBPARTITION BY KEY(uid) SUBPARTITIONS 2( PARTITION p0 VALUES LESS THAN (3000000) DATA DIRECTORY = '/data0/data' INDEX DIRECTORY = '/data1/idx', PARTITION p1 VALUES LESS THAN (6000000) DATA DIRECTORY = '/data2/data' INDEX DIRECTORY = '/data3/idx');分区管理:删除分区及分区里的数据,会丢失数据ALERT TABLE users DROP PARTITION p0;不可以删除hash或者key分区.一次性删除多个分区,alter table emp drop partition p1,p2;分区合并,不会丢失数据ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES LESS THAN (6000000));ALTER TABLE users REORGANIZE PARTITION p0,p1 INTO (PARTITION p0 VALUES IN(0,1,4,5,8,9,12,13));hash和key分区不能用REORGANIZE分区分解,不会丢失数据alter table te reorganize partition p1 into ( partition p1 values less than (100), partition p2 values less than (200) );增加分区,不会丢失数据ALTER TABLE category ADD PARTITION (PARTITION p4 VALUES IN (16,17,18,19) DATA DIRECTORY = '/data8/data' INDEX DIRECTORY = '/data9/idx');alter table emp add partition (partition p3 values less than (4000));ALTER TABLE users ADD PARTITION PARTITIONS 8;给已有的表分区,不会丢失数据alter table results partition by RANGE (year(ttime)) (PARTITION p0 VALUES LESS THAN (1999),PARTITION p1 VALUES LESS THAN (2000) , PARTITION p2 VALUES LESS THAN (2001) ,PARTITION p3 VALUES LESS THAN (2002) ,PARTITION p4 VALUES LESS THAN MAXVALUE); 移除表的分区,表会变成普通表,不会丢失数据alter table users remove partitioning;重新定义分区表,不会丢失数据Alter table emp partition by hash(salary) partitions 7; Alter table emp partition by range(salary) ( partition p1 values less than (2000), partition p2 values less than (4000) );重建分区这和先删除保存在分区中的所有记录,然后重新插入它们,具有同样的效果。它可用于整理分区碎片ALTER TABLE emp rebuild partition p1,p2; 优化分区ALTER TABLE emp optimize partition p1,p2;分析分区ALTER TABLE emp analyze partition p1,p2;检查分区ALTER TABLE emp check partition p1,p2;修补分区ALTER TABLE emp repair partition p1,p2;截断分区ALTER TABLE t5 TRUNCATE PARTITION p1;将指定分区的记录置换到普通表中,普通表的定义应该与分区表相同,包括约束、索引等ALTER TABLE t5 exchange PARTITION p0 WITH TABLE t15;
0 0
- mysql分区基础操作
- Mysql 分区操作简介
- Mysql 分区操作简介
- MYSQL的分区操作
- mysql 分区操作
- MySql数据分区操作
- mysql分区常用操作
- mysql分区常见操作
- mysql 数据库分区操作
- mysql 数据分区操作
- mysql分区类型及操作
- mysql分区类型及操作
- MYSQL学习笔记-mysql分区基本操作
- 【mysql】mysql基础操作
- MYSQL表分区操作错误1503解决方案
- MYSQL表分区操作错误1503解决方案
- 【MYSQL数据库】MYSQL学习笔记-mysql分区基本操作
- MySQL基础1--基础操作
- ubuntu 网络配置
- 使用Poco库编写一个简单的http客户端原理
- 真TM通俗易懂(链表、指针)
- SQL解析过程
- How to solve “Dynamic Web Module 3.1 requires Java 1.7 or newer” in Eclipse
- mysql分区基础操作
- Java中,if-else if- else语句执行流程
- Arm7 内核结构图
- Comparable<T>接口实现
- HDOJ1006 Tick and Tick题解
- 三月小结
- Linux使用技巧8--ssh server
- 我的java学习笔记(11)关于装箱、参数可变方法和枚举类型
- [C++杂记] 数组的语法我总忘记~记之