MySQL分区表(二)

说明:之前有写过一篇博客,介绍MySQL如何建立分区表,本文介绍如何建立子分区表。子分区,就是在原来分区的基础上,再嵌套一个分区。

例如,按照记录的创建时间分区,在此基础上,再按照租户ID嵌套一个子分区。如果按照时间建立了12个分区,租户ID有3个,那么最终建立的子分区就是:12 × 3 = 36个;

下面介绍如何建立和使用子分区:

建立

如下,建立一个子分区表,tb_user;

-- 建立子分区表tb_user
CREATE TABLE `tb_user`
(`id`          int         NOT NULL AUTO_INCREMENT,`tenant_id`   varchar(50) NOT NULL,`username`    varchar(20) DEFAULT NULL,`password`    varchar(20) DEFAULT NULL,`create_date` bigint      NOT NULL,PRIMARY KEY (`id`, `tenant_id`, `create_date`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4COLLATE = utf8mb4_general_ciCOMMENT ='用户表'PARTITION BY RANGE (`create_date`) SUBPARTITION BY key (`tenant_id`)(PARTITION tb_user_1735660800000 VALUES LESS THAN (1735660800000)(SUBPARTITION tb_user_1735660800000_01,SUBPARTITION tb_user_1735660800000_02),PARTITION tb_user_1767196800000 VALUES LESS THAN (1767196800000)(SUBPARTITION tb_user_1767196800000_01,SUBPARTITION tb_user_1767196800000_02));

PARTITION BY后面部分是分区相关的SQL,表示按照create_date字段range分区,后根据tenant_id字段key分区,以上是建表时就定义好的。

如果是针对一张已存在的表建立子分区,就用下面这个,当然,建立分区的字段需要是主键,如果不是,需要先修改表结构

-- 对tb_table建立子分区
ALTER TABLE tb_user PARTITION BY RANGE (`create_date`) SUBPARTITION BY key (`tenant_id`)(-- 2025-01-01 00:00:00PARTITION tb_user_1735660800000 VALUES LESS THAN (1735660800000)(SUBPARTITION tb_user_1735660800000_01,SUBPARTITION tb_user_1735660800000_02),-- 2026-01-01 00:00:00PARTITION tb_user_1767196800000 VALUES LESS THAN (1767196800000)(SUBPARTITION tb_user_1767196800000_01,SUBPARTITION tb_user_1767196800000_02));

执行后,可以看到这张表的分区,是有两层级的。

在这里插入图片描述

使用

下面插入四条数据,如下:

-- 插入数据
-- 1706803200000:2024-02-02 00:00:00
-- 1706803200000:2025-02-02 00:00:00
insert into `tb_user` (tenant_id, username, password, create_date)
values ('1', '分区1', '123456', 1706803200000),('2', '分区2', '12345', 1738425600000),('2', '分区3', '1234', 1706803200000),('1', '分区4', '123', 1738425600000);

然后敲下面的SQL,查看各个分区的情况:

-- 查看各个分区数据
selectPARTITION_NAME,SUBPARTITION_NAME,partition_ordinal_position,partition_method,partition_expression,partition_description,table_name,table_rows
from information_schema.partitions
where table_name = 'tb_user';

可以看到,每个子分区里各存了一条记录,说明分区建立成功了。

在这里插入图片描述

另外

子分区,需要注意以下两点:

(1)对现有表建立分区,历史数据不会被整理到指定分区里,只有修改了历史记录的分区字段,才会被分配到指定分区里;

(2)当数据从一个分区修改到另一个分区时,会落入到子分区值相同的那个分区;


第1点,如下,先插入数据,再分区,查看分区情况,

-- 1.创建表
CREATE TABLE `tb_user`
(`id`          int         NOT NULL AUTO_INCREMENT,`tenant_id`   varchar(50) NOT NULL,`username`    varchar(20) DEFAULT NULL,`password`    varchar(20) DEFAULT NULL,`create_date` bigint      NOT NULL,PRIMARY KEY (`id`, `tenant_id`, `create_date`)
) ENGINE = InnoDBDEFAULT CHARSET = utf8mb4COLLATE = utf8mb4_general_ci COMMENT ='用户表';-- 2.插入数据
-- 1706803200000:2024-02-02 00:00:00
-- 1738425600000:2025-02-02 00:00:00
insert into `tb_user` (tenant_id, username, password, create_date)
values ('1', '分区1', '123456', 1706803200000),('2', '分区2', '12345', 1738425600000),('2', '分区3', '1234', 1706803200000),('1', '分区4', '123', 1738425600000);-- 3.分区
alter table tb_user PARTITION BY RANGE (`create_date`) SUBPARTITION BY key (`tenant_id`)(PARTITION tb_user_1735660800000 VALUES LESS THAN (1735660800000)(SUBPARTITION tb_user_1735660800000_01,SUBPARTITION tb_user_1735660800000_02),PARTITION tb_user_1767196800000 VALUES LESS THAN (1767196800000)(SUBPARTITION tb_user_1767196800000_01,SUBPARTITION tb_user_1767196800000_02));-- 4.查看各个分区数据
select PARTITION_NAME,SUBPARTITION_NAME,partition_ordinal_position,partition_method,partition_expression,partition_description,table_name,table_rows
from information_schema.partitions
where table_name = 'tb_user';

数据没有落入到分区里;

在这里插入图片描述

在这里插入图片描述

如果修改历史数据的分区字段,如下:

-- 5.修改数据
UPDATE tb_user
SET tenant_id = '2'
WHERE id = 1;

在这里插入图片描述

数据分配到了指定分区里;

在这里插入图片描述


第2点,如上,create_date是一级分区字段,tenant_id是二级分区字段,当某条记录修改了create_date,从一个分区换到了另一个分区,数据会落入到这个分区里tenant_id相同值的那个子分区。(感觉是废话,这是当然的)

总结

本文介绍了如何在MySQL中建立子分区,关于MySQL建立List、Range分区,参考下面这篇文章:

  • MySQL分区表(一)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463632.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文弄懂Bert模型

01 引言 计算机一直难以理解语言,其中一个重要原因就是该任务需要更基本的语言语境。每个 NLP 任务都可以通过使用为每个任务创建的单独模型来解决。 2018 年,谷歌发布了论文BERT,旨在对模型进行预训练,这样就可以通过增加不同…

HTML5实现小鸟过管道小游戏源码

文章目录 1.设计来源1.1 主界面1.2 游戏中主界面1.3 游戏结束界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/…

Linux·进程控制(system V)

1. 共享内存 system V共享内存是最快的IPC形式,之前的管道是基于Linux内核开发的通讯方案,其读写接口都是现成的,因此内核设计者为了完成进程间通讯任务并不需要新增太多代码。而共享内存属于system V标准,是操作系统单独…

【Python+Pycharm】2024-Python安装配置教程

【PythonPycharm】2024-Python安装配置教程 一、下载装 Python 1、进入Python官网首页,下载最新的Python版本 Download Python | Python.org 选择对应版本下载 安装 测试安装情况 python如果安装失败 在系统环境变量添加安装路径 where pythonwin7安装路径添加…

文献阅读 11.3

文献阅读 Physics-informed neural networks for hydraulic transient analysis in pipeline systems (基于物理信息的管道系统水力瞬态分析神经网络) 一、文献摘要 该文献提出了一种新的基于物理和数据驱动的定向瞬态压力重建方法,无需建立完整的管道系统模型。…

MFC工控项目实例二十八模拟量信号每秒采集100次

用两个多媒体定时器,一个定时0.1秒计时,另一个定时0.01秒用来对模拟量信号采集每秒100次。 1、在SEAL_PRESSUREDlg.h中添加代码 class CSEAL_PRESSUREDlg : public CDialo { public:CSEAL_PRESSUREDlg(CWnd* pParent NULL); // standard constructor&a…

气膜冰雪项目:推动冰雪运动发展的新纪元—轻空间

随着2024年北京冬奥会的余温仍在延续,气膜冰雪项目在我国的冰雪运动发展中扮演着愈发重要的角色。气膜结构以其独特的优势,正吸引着越来越多的参与者,推动着冰雪运动的普及与发展。 突出的优势 气膜冰雪馆的设计理念充分体现了现代建筑的灵活…

市场分化!汽车零部件「变天」

全球汽车市场的动荡不安,还在持续。 本周,全球TOP20汽车零部件公司—安波福(Aptiv)发布2024年第三季度财报显示,三季度公司经调整后确认收入同比下降6%;按照区域市场来看,也几乎是清一色的下滑景…

ES6中数组新增了哪些扩展?

ES6中数组新增了哪些扩展? 1、扩展运算符的应⽤ ES6通过扩展元素符 … ,好⽐ rest 参数的逆运算,将⼀个数组转为⽤逗号分隔的参数序列 console.log(...[1, 2, 3]) // 1 2 3 3 console.log(1, ...[2, 3, 4], 5) // 1 2 3 4 5 [...documen…

基于物联网的户外环境检测装置教学文章

引言 随着物联网(IoT)技术的发展,越来越多的应用被广泛研究和应用于我们的日常生活中。户外环境检测装置是一种利用传感器、网络连接和数据分析技术,监测和分析环境数据(如温度、湿度、空气质量等)的设备。…

ubuntu20安装opencv3.2记录

系统环境 ubuntu20安装了ros-noetic,所以系统默认装了opencv4.2.0,但是跑fastlivo推荐的是opencv3.2.0,而且海康相机别人写的ros驱动(海康相机ros驱动)也是需要opencv3.2.0,最终还是选择安装多版本的openc…

全!新!LLM推理加速调研

本文主要内容 介绍一篇大模型推理加速综述论文,简单说明了LLM推理加速的基本内容。 介绍了推理阶段的prefilling(主要方向:计算优化)和decoding(主要方向:内存优化)差异。 prefilling优化方面…

大数据-206 数据挖掘 机器学习理论 - 多元线性回归 回归算法实现 算法评估指标

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

Python+Appium+Pytest+Allure自动化测试框架-安装篇

文章目录 安装安装ADT安装NodeJs安装python安装appium安装Appium Server(可选)安装Appium-Inspector(可选)安装allure安装pytest PythonAppiumPytestAllure框架的安装 Appium是一个开源工具,是跨平台的,用于…

Nature Methods | 新型三维光场显微成像技术

欢迎关注GZH《光场视觉》 近日,中科院脑科学与智能技术卓越创新中心王凯研究组在《自然方法》(Nature Methods)上,在线发表了题为Volumetric Voltage Imaging of Neuronal Populations in Mouse Brain by Confocal Light Field M…

深度学习基础—循环神经网络的梯度消失与解决

引言 深度学习基础—循环神经网络(RNN)https://blog.csdn.net/sniper_fandc/article/details/143417972?fromshareblogdetail&sharetypeblogdetail&sharerId143417972&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link深…

基于向量检索的RAG大模型

一、什么是向量 向量是一种有大小和方向的数学对象。它可以表示为从一个点到另一个点的有向线段。例如,二维空间中的向量可以表示为 (𝑥,𝑦) ,表示从原点 (0,0)到点 (𝑥,𝑦)的有向线段。 1.1、文本向量 1…

Bartender 5 for Mac 菜单栏管理软件 安装教程【保姆级教程,操作简单小白轻松上手使用】

Mac分享吧 文章目录 Bartender 5 for Mac 菜单栏管理软件 安装完成,软件打开效果一、Bartender 5 菜单栏管理软件 Mac电脑版——v5.2.3⚠️注意事项:1️⃣:下载软件2️⃣:安装软件3️⃣:打开软件,根据自己…

国产操作系统重新安装软件商店

国产操作系统类似于手机的“应用商店”,都会有一个“软件商店”,方便用户安装管理电脑的软件。这个软件商店不仅有各种软件,还有各类外设驱动和移动应用环境模拟功能。软件商店可以下载安装软件,还可以更新、卸载软件。 软件商店 …

FastAPI中如果async def和def 路由的区别

在python的整体生态中,虽然已经有很多库支持了异步调用,如可以使用httpx或者aiohttp代替requests库发起http请求,使用asyncio.sleep 代替time.sleep, 但是依然还有很多优秀的第三方库是不支持异步调用也没有可代替的库&#xff0c…