高性能可扩展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
使用分区表的注意事项:
- 结合业务场景选择分区键,避免跨分区查询;
- 对分区表进行查询最好在WHERE从句中包含分区键;
- 具有主键或唯一索引的键,主键或唯一索引必须是分区键的一部分。
高性能可扩展mysql 笔记(四)项目分区表演示的更多相关文章
- 高性能可扩展mysql 笔记(三)Hash分区、RANGE分区、LIST分区
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.MySQL分区表操作 1.定义:数据库表分区是数据库基本设计规范之一,分区表在物理上表现为多个文件, ...
- 高性能可扩展mysql 笔记(一)数据库表、索引、SQL语句设计规范
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 项目说明:该笔记的背景为电商平台项目,电商项目由于其高并发.多线程.高耗能等特性,在众多的项目类型中涉及 ...
- 高性能可扩展mysql 笔记(六) SQL执行计划及分页查询优化、分区键统计
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 常见业务处理 一.使用数据库处理常见业务: 案例: 如何对评论进行分页展示 使用 EXPLAIN 获得s ...
- 高性能可扩展mysql 笔记(五)商品实体、订单实体、DB规划
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.商品模块 商品实体信息所存储的表包括: 品牌信息表: create table `brand_i ...
- 高性能可扩展mysql 笔记(二)用户模型设计、用户实体表结构设计、设计范式
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.用户模型设计 电商羡慕中用户模型的设计涉及以下几个部分: 以电商平台京东的登录.注册页面作为例: ...
- 高性能可扩展MySQL数据库设计及架构优化 电商项目(慕课)第3章 MySQL执行计划(explain)分析
ID:相同就从上而下,不同数字越大越优先
- mysql列属性auto(mysql笔记四)
常见的的是一个字段不为null存在默认值 没值得时候才去找默认值,可以插入一个null到 可以为null的行里 主键:可以唯一标识某条记录的字段或者字段的集合 主键设置 主键不可为null,声明时自动 ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- MySql学习笔记四
MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...
随机推荐
- 闲来无事做个C#小项目——1
2020-05-10 12:25:47 项目背景就是最近和一些朋友在玩一个游戏,游戏中有一个囤货的东西,就是买进卖出的,然后为了方便计算,所以就先写一个简单的计算器用来算账, 这是界面图(最初形态,没 ...
- Day_13【IO流】扩展案例1_读取项目文件内容并去重
分析以下需求,并用代码实现: 需求: 读取当前项目下的info1.txt 文件内容如下 : aaaaaaaaaaabbbbbbbbbbbbccdefg 要求将数据去重后写回最终效果 : fgdebca ...
- node.js开发指南系列(1)partial is not defined
ejs视图引擎中使用partial函数: <ul><%- partial('listitem', items) %></ul> 报错:partial is not ...
- OpenCV 经纬法将鱼眼图像展开
文章目录 前言 理论部分 鱼眼展开流程 鱼眼标准坐标计算 标准坐标系与球坐标的转换 代码实现 测试效果如下图 总结 this demo on github 前言 鱼眼镜头相比传统的镜头,视角更广,采集 ...
- ADC电路持续更新
http://www.mcuol.com/tech/109/30923.htm
- 基于R语言的航空公司客户价值分析
分析航空公司现状 1.行业内竞争 民航的竞争除了三大航空公司之间的竞争之外,还将加入新崛起的各类小型航空公司.民营航空公司,甚至国外航空巨头.航空产品生产过剩,产品同质化特征愈加明显,于是航空公司从价 ...
- js代码中引入其他js文件
/***引入 js 文件 @example: import('js/aui.picker.js') @example: import(['js/aui.picker.js', 'css/aui.pic ...
- Dynamics 365 联系人Contact的快速创建窗体,如何知道父窗体是哪个实体,通过window.top.parent.Xrm.Page.getUrl()可以知道父窗体的URL
Dynamics 365 联系人Contact的快速创建窗体,如何知道父窗体是哪个实体?相信有人会遇到过这种头疼的问题,我这里分享一种方式: 在contact快速创建窗体的onload时间执行如下代码 ...
- python实现简易工资管理系统(Salary Manage)源码
一.需求: 1.导入文件读取员工的信息和工资信息,最后将增加.删除或修改的员工工资信息写入原来的文件中 2.能够实现员工工资信息的增删改查 3.当增加和修改员工信息时用户用空格分隔员工姓名和薪资 4. ...
- python实现简易词频统计-源码
需求:给瓦尔登湖文章统计单词出现的频率 思路:首先读取文件并以空格分割得到列表,然后利用for循环遍历列表中的元素并把去掉列表元素中的符号,第三步去掉相同的元素,将列表转换为一个字典,最后按照键值对升 ...