十四、mysql 分区之 HASH && KEY

1.hash分区
    PS::个人觉得HASH分区很好很强大,简单确分布极其均匀
    创建实例:
    CREATE TABLE HASH_EMP (
        tid int,
        tname char(255)
    )
    PARTITION BY HASH (tid) PARTITIONS 8;
    将hash_emp进行的tid进行hash分区,并分为8个区

    查询分区的数据分布情况:
    select partition_name,partition_expression,partition_description,table_rows from information_schema.partitions where table_schema = schema() and table_name = ‘hash_emp‘;
    +----------------+----------------------+-----------------------+------------+
    | partition_name | partition_expression | partition_description | table_rows |
    +----------------+----------------------+-----------------------+------------+
    | p0             | tid                  | NULL                  |         0 |
    | p1             | tid                  | NULL                  |         0 |
    | p2             | tid                  | NULL                  |         0 |
    | p3             | tid                  | NULL                  |         0 |
    | p4             | tid                  | NULL                  |         0 |
    | p5             | tid                  | NULL                  |         0 |
    | p6             | tid                  | NULL                  |         0 |
    | p7             | tid                  | NULL                  |         0 |
    +----------------+----------------------+-----------------------+------------+

    创建1个event,用来不间断写入数据,测试分布情况:
    create event hash_emp_event on scheduler every 1 second do insert into hash_emp values (NULL,now());
    set GLOBAL event_scheduler = 1; //开启调度器

    再次查看分区数据分布情况:
    +----------------+----------------------+-----------------------+------------+
    | partition_name | partition_expression | partition_description | table_rows |
    +----------------+----------------------+-----------------------+------------+
    | p0             | tid                  | NULL                  |         41 |
    | p1             | tid                  | NULL                  |         42 |
    | p2             | tid                  | NULL                  |         42 |
    | p3             | tid                  | NULL                  |         42 |
    | p4             | tid                  | NULL                  |         42 |
    | p5             | tid                  | NULL                  |         42 |
    | p6             | tid                  | NULL                  |         42 |
    | p7             | tid                  | NULL                  |         42 |
    +----------------+----------------------+-----------------------+------------+

    可以看出来,hash分布极其均匀:;

2.Key分区
    PS::所谓key分区则是指mysql默认使用表的主键或唯一建进行分区管理
    创建实例:
    CREATE TABLE KEY_EMP (
        tid int,
        tname char(255)
    )
    PARTITION BY KEY (tid) PARTITIONS 8;
    PS::因为跟hash差不多,就不进行过多测试了!!!

3.子分区
    PS::顾名思义就是在分区上再建分区
    PS::支持子分区的分区模式有range || list ,它们2者都可以支持hash或list的子分区
    创建实例::
    CREATE TABLE ZI_EMP (
        tid int,
        tname char(255)
    )
    PARTITION BY RANGE (tid)
    SUBPARTITION BY HASH (tid)
    SUBPARTITIONS 2 (
    PARTITION p0 values less than (1990),
    PARTITION p1 values less than (2028),
    PARTITION p2 values less than (MAXVALUE)
    );
    将zi_emp分成了3个range分区,每个分区在分为2个子分区,如是,有了下面的分区结构:
    +----------------+----------------------+-----------------------+------------+
    | partition_name | partition_expression | partition_description | table_rows |
    +----------------+----------------------+-----------------------+------------+
    | p0             | tid                  | 1990                  |          0 |
    | p0             | tid                  | 1990                  |          0 |
    | p1             | tid                  | 2028                  |          0 |
    | p1             | tid                  | 2028                  |          0 |
    | p2             | tid                  | MAXVALUE              |          0 |
    | p2             | tid                  | MAXVALUE              |          0 |
    +----------------+----------------------+-----------------------+------------+
    也就是说,如果tid小于1990,那么数据会被hash分配到p0这2个子分区中

十四、mysql 分区之 HASH && KEY,布布扣,bubuko.com

时间: 2024-08-06 17:09:43

十四、mysql 分区之 HASH && KEY的相关文章

Java基础学习笔记二十四 MySQL安装图解

.MYSQL的安装 1.打开下载的mysql安装文件mysql-5.5.27-win32.zip,双击解压缩,运行“setup.exe”. 2.选择安装类型,有“Typical(默认)”.“Complete(完全)”.“Custom(用户自定义)”三个选项,选择“Custom”,按“next”键继续. 3.点选“Browse”,手动指定安装目录. 4.填上安装目录,我的是“F:\Server\MySQL\MySQL Server 5.0”,也建议不要放在与操作系统同一分区,这样可以防止系统备份还

Linux命令:MySQL系列之十四--MySQL备份与还原(xtrabackup工具重要章节)

一.percona-xtrabckup安装环境:redhat 6.0数据库:mysql 5.5.28  (编译安装) 1,官网下载并安装(下载地址文章尾部) [[email protected] ~]# rpm -ivh percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm warning: percona-xtrabackup-2.0.0-417.rhel6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID

Python学习日记(三十四) Mysql数据库篇 二

外键(Foreign Key) 如果今天有一张表上面有很多职务的信息 我们可以通过使用外键的方式去将两张表产生关联 这样的好处能够节省空间,比方说你今天的职务名称很长,在一张表中就要重复的去写这个职务的名字,很浪费空间;除此之外也能起到一个约束的作用. 像department就是外键. 执行代码: create table t1( uid bigint auto_increment primary key, name varchar(32), department_id int, gender

Linux命令:MySQL系列之十四--MySQL备份与还原(LVM逻辑卷)

通过LVM逻辑卷实现MySQL备份及还原(几乎热备):        前提: 1.数据文件要在逻辑卷上: 2.此逻辑卷所在卷组必须有足够的空间使用快照卷: 3.数据文件和事务日志要在同一个逻辑卷上: 步骤: 1.打开会话,施加读锁,锁定所有表: mysql> FLUSH TABLES WITH READ LOCK;  #刷新表并对表施加读锁 mysql> FLUSH LOGS;   #滚动日志               2.通过另一个终端,保存二进制日志文件及相关位置信息: [[email 

十五、mysql 分区之 分区管理

1.mysql分区处理分区字段NULL值的方式 1.range分区null被当作最小值处理 2.list分区null值必须被枚举出来,否则将出错 3.hash/key分区 null值当作0处理 2.RANGE && LIST 分区管理 1.删除分区 alter table emp drop partition p0; //删除emp的p0分区,注意也会同时删除该分区的数据 2.增加分区 alter table emp add partition (partition p5 values l

Mysql 分区介绍(九) —— 分区管理

一.分区操作 1. 将没有分区的表改为分区表 ALTER TABLE trb3 PARTITION BY KEY(id) PARTITIONS 2; 2. 删除分区 # 删除所有分区, 同时数据丢失 ALTER TABLE es2 REMOVE PARTITIONING; # 删除指定分区, 数据丢失 ALTER TABLE tr DROP PARTITION p2; 3. SELECT指定分区查询 select * from daily_rank_1_1 partition (p2015_04

mysql表分区(摘自 MySQL表的四种分区类型)

一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率. 分区的一些优点包括: 与单个磁盘或文件系统分区相比,可以存储更多的数据.对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据.相

Mysql的四种分区

mysql一共有四大分区分别为hash range list key 四个分区. 分区的字段需要时主键才可以成功 . 第一种 hash分区 第二张list分区 第三种 key分区 第四种 range分区[需要注意时间]

MySQL表的四种分区类型

MySQL表的四种分区类型 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表分区,也可以根据所在地将表分区.当然也可根据其他的条件分区. 二.为什么要对表进行分区 为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率. 分区的一些优点包括: 与单个磁盘或文件系统分区相比,可以存储更多的数据. 对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有