个人博客网: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. 具有主键或唯一索引的键,主键或唯一索引必须是分区键的一部分。

高性能可扩展mysql 笔记(四)项目分区表演示的更多相关文章

  1. 高性能可扩展mysql 笔记(三)Hash分区、RANGE分区、LIST分区

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.MySQL分区表操作 1.定义:数据库表分区是数据库基本设计规范之一,分区表在物理上表现为多个文件, ...

  2. 高性能可扩展mysql 笔记(一)数据库表、索引、SQL语句设计规范

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 项目说明:该笔记的背景为电商平台项目,电商项目由于其高并发.多线程.高耗能等特性,在众多的项目类型中涉及 ...

  3. 高性能可扩展mysql 笔记(六) SQL执行计划及分页查询优化、分区键统计

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 常见业务处理 一.使用数据库处理常见业务: 案例: 如何对评论进行分页展示 使用 EXPLAIN 获得s ...

  4. 高性能可扩展mysql 笔记(五)商品实体、订单实体、DB规划

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.商品模块 ​ 商品实体信息所存储的表包括: 品牌信息表: create table `brand_i ...

  5. 高性能可扩展mysql 笔记(二)用户模型设计、用户实体表结构设计、设计范式

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.用户模型设计 电商羡慕中用户模型的设计涉及以下几个部分: ​ 以电商平台京东的登录.注册页面作为例: ...

  6. 高性能可扩展MySQL数据库设计及架构优化 电商项目(慕课)第3章 MySQL执行计划(explain)分析

    ID:相同就从上而下,不同数字越大越优先

  7. mysql列属性auto(mysql笔记四)

    常见的的是一个字段不为null存在默认值 没值得时候才去找默认值,可以插入一个null到 可以为null的行里 主键:可以唯一标识某条记录的字段或者字段的集合 主键设置 主键不可为null,声明时自动 ...

  8. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  9. MySql学习笔记四

    MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...

随机推荐

  1. java基础 之 从Class.forName()跟.class的区别看类的初始化

    代码如下: public class Test { public static void main(String[] args) throws Exception { System.out.print ...

  2. 关于Cookie的一点简单认识

    1.Cookie Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一服务器,是在客户端保持状态的方案.通常每个 Cookie 的大小不能超过4KB.客户端每次向服务器发出请求,就 ...

  3. SAP ME31K SUBOBJECT_NOT_FOUND

    SUBOBJECT_NOT_FOUND 在使用BAPI:BAPI_CONTRACT_CREATE创建协议时报错, 错误位置在此处,子对象没找到 GOOGLE到相关解决方案 事务代码:SLG0 新增对象 ...

  4. Azure AD(二)调用受Microsoft 标识平台保护的 ASP.NET Core Web API 上

    一,引言 上一节讲到Azure AD的一些基础概念,以及Azure AD究竟可以用来做什么?本节就接着讲如何在我们的项目中集成Azure AD 包含我们的API资源(其实这里还可以在 SPA单页面应用 ...

  5. [hdu5525 Product]暴力

    题意:给定n和a[],令N = ∏(1≤i≤n)ia[i],求N的所有约数的积(取模1e9+7) 思路: 假定N因式分解后的结果是2p1*3p2*5p3*...,如何计算答案呢? 单独看2p1这一项, ...

  6. [CodeForces 300C Beautiful Numbers]组合计数

    题意:十进制的每一位仅由a和b组成的数是“X数”,求长度为n,各数位上的数的和是X数的X数的个数 思路:由于总的位数为n,每一位只能是a或b,令a有p个,则b有(n-p)个,如果 a*p+b*(n-p ...

  7. C#语言实现推箱子

    话不多说直接上代码 using System; namespace Boxer { class Program { const int WIDTH = 8; const int HEIGHT = 8; ...

  8. 容器技术之LXC

    什么是容器?在生活中我们常见的容器有各种瓶瓶罐罐.各种能够容纳其它物料的东西叫容器:容器的特点就是有着很好的隔离作用,使得不同的物料互相隔离:除此之外容器还方便运输.方便储存:这是生活中所说的容器,以 ...

  9. mybatis 分页失败 始终pageSize = 2147483647

    是在使用分页查询时 this.jobReadMapper.beginPager(pageParam);XXXXXXXXXXXXXXXXXXXXXXXXthis.xxxReadMapper.queryB ...

  10. 依赖工程开发,编译报错Command Libtool failed with a nonzero exit code

    升级AFN之后,SDK工程始终编译不通过找不到SDK.a 原因在SDK Target ->Build phases ->Link Binary With Libraries 多添加了SDK ...