分区管理  论坛

1. RANGE和LIST分区的管理

针对非整形字段进行RANG\LIST分区建议使用COLUMNS分区。 

RANGE COLUMNS是RANGE分区的一种特殊类型,它与RANGE分区的区别如下:
1. RANGE COLUMNS不接受表达式,只能是列名。而RANGE分区则要求分区的对象是整数。
2. RANGE COLUMNS允许多个列,在底层实现上,它比较的是元祖(多个列值组成的列表),而RANGE比较的是标量,即数值的大小。
3. RANGE COLUMNS不限于整数对象,date,datetime,string都可作为分区列。

  1. CREATE TABLE rcx (
  2. a INT,
  3. b INT,
  4. c CHAR(3),
  5. d INT
  6. )
  7. PARTITION BY RANGE COLUMNS(a,d,c) (
  8. PARTITION p0 VALUES LESS THAN (5,10,'ggg'),
  9. PARTITION p1 VALUES LESS THAN (10,20,'mmmm'),
  10. PARTITION p2 VALUES LESS THAN (15,30,'sss'),
  11. PARTITION p3 VALUES LESS THAN (MAXVALUE,MAXVALUE,MAXVALUE)
  12. );

添加

  1. CREATE TABLE IF NOT EXISTS `t1` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'xxid',
  3. `store_id` int(10) unsigned NOT NULL,
  4. `customer_surname` varchar(30) NOT NULL,
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='xx表' AUTO_INCREMENT=1 partition by range(id)(
  7. partition p0 values less than(5),
  8. partition p1 values less than(10),
  9. partition p2 values less than(15)
  10. );

追加

  1. alter table t1 add partition(
  2. partition p3 values less than(20)
  3. );
  1. 修改分区为key类型的分区
  1. #这和先删除这个表、然后使用“CREATE TABLE t1 PARTITION BY KEY(id) PARTITIONS 2;”重新创建这个表具有同样的效果
  2. ALTER TABLE t1 partition by key(id) partition 2
  1. 如果希望改变表的分区而又不丢失数据,使用“ALTER TABLE ... REORGANIZE PARTITION”语句
  1. #分解分区 将p0拆分为s0和s1
  2. ALTER TABLE members REORGANIZE PARTITION p0 INTO (
  3. PARTITION s0 VALUES LESS THAN (3),
  4. PARTITION s1 VALUES LESS THAN (5)
  5. );
  6.  
  7. #合并分区 将s0和s1合并为p0
  8. ALTER TABLE members REORGANIZE PARTITION s0,s1 INTO (
  9. PARTITION p0 VALUES LESS THAN (5)
  10. );
  11.  
  12. #合并分区 将s0和s1合并为 r0 r1
  13. ALTER TABLE members REORGANIZE PARTITION s0,s1 INTO (
  14. PARTITION s0 VALUES LESS THAN (2),
  15. PARTITION p0 VALUES LESS THAN (5)
  16. );

删除分区

  1. #当删除了一个分区,也同时删除了该分区中所有的数据
  2. ALTER TABLE t1 drop partition p0,p1,p2,p3;
  3. #如果希望从所有分区删除所有的数据,但是又保留表的定义和表的分区模式,使用TRUNCATE TABLE命令

2. HASH和KEY分区的管理

增加:

  1. CREATE TABLE clients(
  2. id INT NOT NULL,
  3. firstname VARCHAR(30),
  4. lastname VARCHAR(30),
  5. hired DATE NOT NULL DEFAULT '1970-01-01',
  6. separated DATE NOT NULL DEFAULT '9999-12-31',
    signed DATE
  7. )
  8. PARTITION BY HASH(MONTH(signed))
  9. PARTITIONS 12
    //将hash类型的分区分为12个
    //基于时间类型的字段的转换函数mysql提供了"YEAR(),MONTH(),DAY(),TO_DAYS(),TO_SECONDS(),WEEKDAY(),DAYOFYEAR()

修改:coalesce

  1. #将12个分区改为6个
  2. ALTER TABLE clients COALESCE PARTITION 6

删除

???

3. 分区维护

  1. 。对于分区表,MySQL不支持命令CHECK TABLEOPTIMIZE TABLEANALYZE TABLE,或REPAIR TABLE。作为替代,可以使用ALTER TABLE 的许多扩展来在一个或多个分区上直接地执行这些操作,如下面列出的那样

重建分区:

  1. ALTER TABLE t1 REBUILD PARTITION (p0, p1);
  1. 优化分区:如果从分区中删除了大量的行,或者对一个带有可变长度的行(也就是说,有VARCHARBLOB,或TEXT类型的列)作了许多修改,可以使用“ALTER TABLE ... OPTIMIZE PARTITION”来收回没有使用的空间,并整理分区数据文件的碎片

4. 获取关于分区的信息

  1. #在一个给定的分区表上使用“OPTIMIZE PARTITION”等同于在那个分区上运行CHECK PARTITION,ANALYZE PARTITION,和REPAIR PARTITION。
  2. ALTER TABLE t1 OPTIMIZE PARTITION (p0, p1);
  1. 分析分区:读取并保存分区的键分布
  1. ALTER TABLE t1 ANALYZE PARTITION (p3);
  1. 修补分区: 修补被破坏的分区。
  1. ALTER TABLE t1 REPAIR PARTITION (p0,p1);
  1. 检查分区: 可以使用几乎与对非分区表使用CHECK TABLE 相同的方式检查分区
  1. #这个命令可以告诉你表t1的分区p1中的数据或索引是否已经被破坏。如果发生了这种情况,使用“ALTER TABLE ... REPAIR PARTITION”来修补该分区
  2. ALTER TABLE trb3 CHECK PARTITION (p1);
  3. #还可以使用mysqlcheck或myisamchk 应用程序,在对表进行分区时所产生的、单独的MYI文件上进行操作,来完成这些任务。请参见8.7节,“mysqlcheck:表维护和维修程序”

4.获取关于分区的信息

查看建表结构

  1. SHOW CREATE TABLE 表名;#当前,对于按HASHKEY分区的表,PARTITIONS子句并不显示

查看是否支持分区

  1. SHOW VARIABLES LIKE '%partition%';

表的各种参数状态

  1. SHOW TABLE STATUS

查看分区情况:

  1. select
  2. partition_name part,
  3. partition_expression expr,
  4. partition_description descr,
  5. table_rows
  6. from information_schema.partitions where
  7. table_schema = schema()
  8. and table_name='填入你要查看的表名';

通过数据字典查看分区信息

  1. select * from information_schema.partitions;

通过此语句扫描分区及其使用情况

  1. explain partitions select * from mdl_user;

mysql分区partition详解的更多相关文章

  1. MySQL数据库优化详解(收藏)

    MySQL数据库优化详解 mysql表复制 复制表结构+复制表数据mysql> create table t3 like t1;mysql> insert into t3 select * ...

  2. (转)MySQL备份原理详解

    MySQL备份原理详解 原文:http://www.cnblogs.com/cchust/p/5452557.html 备份是数据安全的最后一道防线,对于任何数据丢失的场景,备份虽然不一定能恢复百分之 ...

  3. MySQL EXPLAIN 命令详解

    MySQL EXPLAIN 命令详解 MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提 ...

  4. 【mysql】mysql innodb 配置详解

    MySQL innodb 配置详解 innodb_buffer_pool_size:这是InnoDB最重要的设置,对InnoDB性能有决定性的影响.默认的设置只有8M,所以默认的数据库设置下面Inno ...

  5. MySQL 联合索引详解

    MySQL 联合索引详解   联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c ...

  6. MySQL关闭过程详解和安全关闭MySQL的方法

    MySQL关闭过程详解和安全关闭MySQL的方法 www.hongkevip.com 时间: -- : 阅读: 整理: 红客VIP 分享到: 红客VIP(http://www.hongkevip.co ...

  7. 【转】Nginx+php-fpm+MySQL分离部署详解

    转:http://www.linuxidc.com/Linux/2015-07/120580.htm Nginx+php-fpm+MySQL分离部署详解 [日期:2015-07-26] 来源:Linu ...

  8. Linux centos7环境下安装MySQL的步骤详解

    Linux centos7环境下安装MySQL的步骤详解 安装MySQL mysql 有两个跟windows不同的地方 1).my.ini 保存到/etc/my.ini 2).用户权限,单独用户执行 ...

  9. Mysql加锁过程详解(8)-理解innodb的锁(record,gap,Next-Key lock)

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

随机推荐

  1. Hadoop生态上几个技术的关系与区别:hive、pig、hbase 关系与区别  Pig

    Hadoop生态上几个技术的关系与区别:hive.pig.hbase 关系与区别 Pig 一种操作hadoop的轻量级脚本语言,最初又雅虎公司推出,不过现在正在走下坡路了.当初雅虎自己慢慢退出pig的 ...

  2. 用Nginx搭建CDN服务器方法-开启Nginx缓存与镜像,自建图片服务器

    利用Nginx的proxy_cache搭建缓存服务器一:编译ngx_cache_purge1.Nginx的Proxy_cache是根据Key值md5哈希存储缓存,支持任意的Key,例如你可以根据”域名 ...

  3. CodeForces-1249C2-Good Numbers (hard version) -巧妙进制/暴力

    The only difference between easy and hard versions is the maximum value of n. You are given a positi ...

  4. CDH6.1.0离线安装——笔记

    一. 概述 该文档主要记录大数据平台的搭建CDH版的部署过程,以供后续部署环境提供技术参考. 1.1 主流大数据部署方法 目前主流的hadoop平台部署方法主要有以下三种: Apache hadoop ...

  5. Java中有趣的String、StringBuffer与StringBuilder

    String介绍 String类属于java.lang包中,String类是不可变类,任何对String的改变都会引发新的String对象的生成. 创建String的两种方式: 1.通过构造器创建:S ...

  6. 天道神诀--IPSAN实现多链路以及多路径安装

    # linux6 环境需求 ISCSI服务端: 2张网卡,足够的磁盘空间 iscsi客户端: 2张网卡(与服务端网段相同) ISCSI服务端配置: 与1张网卡配置主要差别在于配置文件中的允许访问网段, ...

  7. SQL Server2012 Offset Fetch子句 分页查询

    在本教程中,将学习如何使用SQL Server OFFSET FETCH子句来限制查询返回的行数.OFFSET和FETCH子句是ORDER BY子句的选项. 它们用于限制查询返回的行数.以下是OFFS ...

  8. splay模版

    //splay模版 #include<iostream> #include<cstdio> #include<cstdlib> #include<cstrin ...

  9. day04 mysql单表查询 多表查询 pymysql的使用

    day04 mysql pymysql   一.单表查询     1.having过滤         一般用作二次筛选             也可以用作一次筛选(残缺的: 只能筛选select里面 ...

  10. ifame问题

    问题描述:在div中添加了点击事件,div中嵌套着一个iframe,父类的div事件全部都会被失效, 解决办法:给iFrame添加css pointer-events : none; 去掉了ifram ...