• mysql 分区


    mysql分区
    前提条件
    mysql版本 5.1以上
    查看是否装载分区插件
    show plugins;
    +------------+--------+----------------+---------+---------+
    | Name       | Status | Type           | Library | License |
    +------------+--------+----------------+---------+---------+
    | binlog     | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
    | partition  | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
    | CSV        | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
    | MEMORY     | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
    | InnoDB     | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
    | MyISAM     | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
    | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL    | GPL     |
    +------------+--------+----------------+---------+---------+
    有partition就行


    按照区域分区range**************
    这种分区时,分区字段要是递增的一种顺序排列,这个字段可以间隔,但不能重复,否则按分区查询的时候只会显示一条,类似groupby


    创建分区表
    create table demo(id int,name char(20))
    partition by range(id)(
        partition p0 values less than(1000),
        partition p1 values less than(2000),
        partition p2 values less than maxvalue
    );

    d $

    创建存储过程
    create procedure insert_data()
    begin
        declare i int default 5000;
        while i>0 do
        insert into demo(id,name) values (i,left(md5(i),5));
        set i=i-1;
        end while;
    end
    $

    create procedure insert_da()
    begin
        declare i int default 5000;
        while i>0 do
        insert into testhash(id,name) values (i,left(md5(i),5));
        set i=i-5;
        end while;
    end
    $

    call insert_data()$


    查询数据看走什么分区
    explain partitions select * from demo where id=100G
    清空表
    truncate demo;

    create table demo(id int,name char(20))
    partitions by range(id)(
        partition p1 values less than(100),
        partition p2 values less than(200),
        partition p3 values less than maxvalue
        );


    list分组

    这个就是通用于归类的情况了 分类cid之类的
    create table test_list(id int,name char(20))
    partition by list(id)(
    partition p1 values in(1,3,5,7,9),
    partition p2 values in(2,4,6,8,0)
    );
    循环插入数据
    create procedure insert_list()
    begin
    declare i int default 100;
    declare y int default 1;
    while i>0 do
        set y = floor(rand()*10);
        insert into test_list(id,name) values(y,left(md5(i),5));
        set i=i-1;
    end while;
    end
    $




    hash分组

    用户自定义分组, 如果分3组的话 第一个添加到第一组 第二个到第二组 第三个到第三组 第四个到第一组...以此类推
    create table testhash(id int,name char(20))
    partition by hash (id)
    partitions 10;

    还有个KEY 分组 和hash分组很类似

    create table test(id int,name varchar(100),addtime date)engine myisam charset utf8
    partition BY KEY (addtime)
    PARTITIONS 10;

  • 相关阅读:
    2018 南京网络预赛Sum
    一个莫比乌斯等式的证明
    LOJ 2452 对称 Antisymmetry——用hash求回文串数
    LOJ 103子串查找——用hash代替kmp算法
    LOJ2823 三个朋友 ——查询字串的哈希值
    hash入门
    2019牛客暑期多校训练营(第十场)Coffee Chicken——递归
    2019牛客暑期多校训练营(第十场)Han Xin and His Troops——扩展中国剩余定理
    mutex 的 可重入
    Linux 编译安装Boost
  • 原文地址:https://www.cnblogs.com/gaofeifiy/p/5074553.html
Copyright © 2020-2023  润新知