zoukankan      html  css  js  c++  java
  • 高性能可扩展mysql 笔记(四)项目分区表演示

     个人博客网:https://wushaopei.github.io/    (你想要这里多有)

    登录日志的分区

    如何为Customer_login_log表分区?

    从以下两个业务场景入手:

    •     用户每次登陆都会记录customer_login_log入职
    •     用户登录日志保存一年,一年后可以删除

    1、登录日志表的分区类型及分区键确定:

        分区类型: 使用RANGE分区

        以login_time作为分区键

    2、创建分区表:

    CREATE TABLE `crn`.`customer_login_log`(
    	customer_id INT UNSIGNED not null,
    	login_time datetime not null,
    	login_ip int UNSIGNED NOT NULL,
    	login_type TINYINT NOT NULL
    )ENGINE = INNODB
    PARTITION BY RANGE(YEAR(login_time))(
    PARTITION p0 values less than(2015),
    PARTITION p2 VALUES less than(2016),
    PARTITION p3 VALUES less than(2017));

    结果截图:

               

    插入分区数据:

    INSERT INTO customer_login_log(customer_id,login_time,login_ip,login_type)
    VALUES(1001,'2015-01-25',0,1),(1001,'2015-07-1',0,1),(1001,'2015-10-1',0,1),(1001,'2016-3-1',0,1),(1001,'2016-9-1',0,1);

                   

    默认匹配规则说明:

    创建2条2020年的数据,

    INSERT INTO customer_login_log(customer_id,login_time,login_ip,login_type)
    VALUES(1001,'2020-01-25',0,1),(1001,'2020-07-1',0,1);

    创建分区范围分别为2019及2021年的分区:

    ALTER TABLE customer_login_log add PARTITION(PARTITION p5 values less than(2019));
    ALTER TABLE customer_login_log add PARTITION(PARTITION p6 values less than(2021));

    最终匹配结果:

               

    新创建的2020年的数据都被匹配到了2021年的分区区间,这是由于在没有创建相应分区的情况下,其会默认匹配到最近的规则的分区区域。有鉴于此,当创建的时间信息超出当前已定义的范围时,需根据规则及时创建新的分区,已规范数据的管理。

    3、删除分区--同步删除分区内数据:

    ALTER TABLE customer_login_log drop PARTITION p6;

    分区表被删除:

               

    在这里对过期数据的删除不需要通过在数据库进行查询等操作,提高了对数据的处理效率,减少了不必要的运算操作

    3、分区数据迁移

    创建新分区表:arch_customer_login_log

    CREATE TABLE arch_customer_login_log(
        customer_id INT UNSIGNED not null,
        login_time datetime not null,
        login_ip int UNSIGNED NOT NULL,
        login_type TINYINT NOT NULL
    )ENGINE = INNODB

    当前customer_login_log 分区表中的数据:

              

    这里将p3的数据迁移到新表中:

    ALTER table customer_login_log exchange PARTITION p3 WITH TABLE arch_customer_login_log;

    迁移后的原表 customer_login_log

                   

    迁移后的新表arch_customer_login_log

                 

    新表arch_customer_login_log的分区信息:

            

    由截图可知,分区表表名为空、归档规则为空;数据量为2条

    实现分区迁移的两个条件:

    ①mysql版本要大于5.7;

    ②归档的分区日志表要属于非分区表,归档的分区表和迁移的分区表数据结构必须相同,并且不能有外键约束;

    满足以上两个条件的多个分区之间就可以进行分区数据的迁移了.

    归档分区表到相应的存储引擎:

    ALTER TABLE arch_customer_login_log ENGINE=archive

    使用分区表的注意事项:

    1.   结合业务场景选择分区键,避免跨分区查询;
    2.  对分区表进行查询最好在WHERE从句中包含分区键;
    3.  具有主键或唯一索引的键,主键或唯一索引必须是分区键的一部分。
  • 相关阅读:
    for循环
    条件语句练习
    语句
    语言基础
    python -- 异步IO 协程
    转--python -- 收发邮件
    hive vs hbase
    postgresql 常用速查
    转--利用hexo搭建个人静态博客
    转- --python 3 编码
  • 原文地址:https://www.cnblogs.com/wushaopei/p/11750569.html
Copyright © 2011-2022 走看看