• 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 具有主键或者唯一索引的表,主键或者唯一键必须是分区键的一部分 

      

  • 相关阅读:
    Java中的软(弱)引用
    国庆节前夕的夜晚
    Internet连接共享只能上qq不能打开网页的问题解决
    Android多线程研究(9)——读写锁
    JavaScript开发——文件夹的上传和下载
    JS开发——文件夹的上传和下载
    B/S开发——文件夹的上传和下载
    php web开发——文件夹的上传和下载
    asp.net web开发——文件夹的上传和下载
    Java web开发——文件夹的上传和下载
  • 原文地址:https://www.cnblogs.com/tjqBlog/p/9471855.html
Copyright © 2020-2023  润新知