zoukankan      html  css  js  c++  java
  • mysql分区

    1. 什么是表分区?

    表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。

    mysql分区表包含三种  hash分区 ,范围分区,列表分区。

     查看当前数据是否支持分区功能命令 show plugins; 如果看到以下结果说明支持

    2 hash分区

      1 基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算。这个函数可以包含MySQL 中有效的、产生非负整数值的任何表达式。

      2 键值必须是一个int整形值,或者经过函数可以转为int

      下面演示hash创建hash分区表

    1 CREATE TABLE `student` (
    2 `id`  int NOT NULL  ,
    3 `name`  varchar(255) NULL ,
    4 `age`  int NULL 
    5 )PARTITION BY HASH(age)
    6 PARTITIONS 4;

     3 RANGE 分区 

      基于属于一个给定连续区间的列值,把多行分配给分区。

      这些区间要连续且不能相互重叠,使用VALUES LESS THAN操作符来进行定义。以下是实例。

    CREATE TABLE people (
        id INT NOT NULL,
        name VARCHAR(30),
        age INT NOT NULL
    )
    partition BY RANGE (age) (
        partition p0 VALUES LESS THAN (10000), -- age 在0-10000的数据由P0分区存储
        partition p1 VALUES LESS THAN (20000), -- age 在10000-20000的数据由P1分区存储
        partition p2 VALUES LESS THAN (30000), -- age 在20000-30000的数据由P2分区存储
        partition p3 VALUES LESS THAN (40000), -- age 在30000-40000的数据由P3分区存储
        partition p4 VALUES LESS THAN MAXVALUE -- age 在40000-int的最大值的数据由P4分区存储
    );

      RANGE 分区的适用场景,

      分区键是日期或者时间的的数据 如日志表 下面创建日志分区表

    CREATE TABLE user_log (
        id INT NOT NULL,
        user_id INT NOT NULL,
        last_login_time DATETIME
    )
    partition BY RANGE (YEAR(last_login_time)) (
        partition p0 VALUES LESS THAN (2015),
        partition p1 VALUES LESS THAN (2016),
        partition p2 VALUES LESS THAN (2017),
        partition p4 VALUES LESS THAN MAXVALUE 
    );

    插入数据 

    INSERT INTO `test`.`user_log` (`id`, `user_id`, `last_login_time`) VALUES ('1', '1', '2018-08-14 23:52:44');

    查询数据 可以看见 p4区有一条数据

    LIST分区

      类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

    CREATE TABLE cat (
        id INT NOT NULL,
        name VARCHAR(30),
        age INT
    )
    PARTITION BY LIST(age)(
        PARTITION p0 VALUES IN (1,3,5,7), -- 奇数存这个分区
        PARTITION p1 VALUES IN (2,4,6,8)  -- 偶数存这个分区
    );

      手动的加分区 删除分区信息

      ALTER TABLE user_log ADD PARTITION (PARTITION  p5 VALUES LESS THAN (2014));

      ALTER TABLE user_log DROP PARTITION p0

    使用分区表需注意的事项 ,

    1 查询时 最好在where条件 设置分区限制 避免跨区查询

    2 具有主键或者唯一索引的表,主键或者唯一键必须是分区键的一部分 

      

  • 相关阅读:
    android 多线程
    Uva 10881 Piotr’s Ants 蚂蚁
    LA 3708 Graveyard 墓地雕塑 NEERC 2006
    UVa 11300 Spreading the Wealth 分金币
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    HDU 4162 Shape Number
    HDU 1869 六度分离
    HDU 1041 Computer Transformation
    利用可变参数函数清空多个数组
  • 原文地址:https://www.cnblogs.com/tjqBlog/p/9471855.html
Copyright © 2011-2022 走看看