Mysql分区表

什么时候使用Mysql分区表?

一般情况下,Mysql单表达到千万级别就可能会查询较慢。

在数据量比较大的情况下,可以考虑使用Mysql分区表。

分区可以将一张表从物理层面根据一定的规则将数据划分为多个分区,多个分区可以单独管理,提升效率。

假如一张表有一千万条数据,拆分成20个分区,在分区数据均匀的情况下,每个分区就只有大概50万数据。

查询全表,就需要在1千万数据中扫描。查询某个分区,就只在50万数据中扫描。

Mysql 分区表

MySQL提供了三种分区类型:范围分区(range)、列表分区(list) 和哈希分区(hash)。

范围分区是最常见的选择。

范围分区(range)

在创建表sql的后面,加上 PARTITION BY RANGE, 就是范围分区。

PARTITION BY RANGE(分区字段), RANGE函数的参数就是分区字段。

LESS THAN 表示小于。MAXVALUE 表示最大的整数。

PARTITION p1 VALUES LESS THAN (18) 表示 分区字段小于18的,归到 p1分区。

CREATE TABLE tb_partition_range_test (id INT NOT NULL,age INT
)
PARTITION BY RANGE(age) (#age小于18的,归到 p1分区PARTITION p1 VALUES LESS THAN (18),#age大于18,小于30的,归到 p2 分区。PARTITION p2 VALUES LESS THAN (30),PARTITION p3 VALUES LESS THAN (60),PARTITION p4 VALUES LESS THAN (MAXVALUE)
);

列表分区(list)

示例如下:

CREATE TABLE tb_partition_list_test (id INT NOT NULL,order_type INT
)
PARTITION BY LIST(order_type) (#order_type是1,4,7其中之一的,归到p1分区。PARTITION p1 VALUES  IN (1,4,7),PARTITION p2 VALUES  IN (2,5,8),PARTITION p3 VALUES  IN (3,6,9),PARTITION p4 VALUES  IN (0)
);

哈希分区(hash)

示例如下:

CREATE TABLE tb_emp
(emp_no varchar(20) not null ,
emp_name varchar(20),
birthdate date not null
)
PARTITION BY HASH(year(birthdate))
PARTITIONS 4;

mysql 分区表,指定分区查询

在表名后面加上 PARTITION(分区) 即可。

SELECT * FROM tb_partition_test PARTITION(p202311) 

注意!!!

  • 除了常规主键外, 用来分区的字段 也必须是主键。可以采用复合主键, 比如 PRIMARY KEY (id,date)

  • 注意,尽量不要跨分区查询,查询时间会比较久。

跨分区查询:

跨分区查询,如果没有拆分成多个分区范围去查询,就会扫全表,查询时间会比久。

比如按月分区,在查询时,需要把日期进行拆分,然后再用 UNION ALL 或者 java代码 进行拼接。

查询日期范围为 03-15 到 04-05 的数据,可以先拆成 03-15到03-31, 以及 04-01到 04-05的查询语句。

可以用 EXPLAIN 查看sql语句的执行计划,查看执行计划结果的字段 ROWS 扫描了多少行。

比如:

EXPLAIN SELECT * FROM tb_partition_test where order_date>='2023-03-15' and order_date< '2023-04-05';

增加分区

ALTER TABLE tb_test ADD PARTITION (PARTITION p8 VALUES LESS THAN (80));

删除分区

ALTER TABLE tb_test DROP PARTITION p8;

合并分区

ALTER TABLE tb_test REORGANIZE PARTITION  a,b INTO (PARTITION m VALUES IN (1,5,6,2,7,8));

拆分分区

ALTER TABLE tb_test REORGANIZE PARTITION  a,b,c INTO 
(PARTITION n VALUES IN (1,5,6,3,9,10),
PARTITION m VALUES IN (2,7,8));

Mysql按月分区:

对于按月分区来说,范围分区是最常见的选择,因为它可以根据日期的范围来分区。

而列表分区和哈希分区则需要手动指定分区,不太适合按月分区。

示例如下:

to_days(Date date):返回从0000年(公元1年)至日期参数date的总天数。

CREATE TABLE `tb_partition_test` (`id` varchar(32) NOT NULL COMMENT 'id',`user_id` varchar(32) DEFAULT NULL COMMENT '用户id',`order_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '订单时间',PRIMARY KEY (`id`,`order_date`),KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试表'
PARTITION BY RANGE (to_days(order_date)) (
PARTITION p202301 VALUES LESS THAN (to_days('2023-02-01')),
PARTITION p202302 VALUES LESS THAN (to_days('2023-03-01')),
PARTITION p202303 VALUES LESS THAN (to_days('2023-04-01')),
PARTITION p202304 VALUES LESS THAN (to_days('2023-05-01')),
PARTITION p202305 VALUES LESS THAN (to_days('2023-06-01')),
PARTITION p202306 VALUES LESS THAN (to_days('2023-07-01')),
PARTITION p202307 VALUES LESS THAN (to_days('2023-08-01')),
PARTITION p202308 VALUES LESS THAN (to_days('2023-09-01')),
PARTITION p202309 VALUES LESS THAN (to_days('2023-10-01')),
PARTITION p202310 VALUES LESS THAN (to_days('2023-11-01')),
PARTITION p202311 VALUES LESS THAN (to_days('2023-12-01')),
PARTITION p202312 VALUES LESS THAN (to_days('2024-01-01')),
PARTITION p202401 VALUES LESS THAN (to_days('2024-02-01')),
PARTITION p202402 VALUES LESS THAN (to_days('2024-03-01')),
PARTITION p202403 VALUES LESS THAN (to_days('2024-04-01')),
PARTITION p202404 VALUES LESS THAN (to_days('2024-05-01')),
PARTITION p202405 VALUES LESS THAN (to_days('2024-06-01')),
PARTITION p202406 VALUES LESS THAN (to_days('2024-07-01')),
PARTITION p202407 VALUES LESS THAN (to_days('2024-08-01')),
PARTITION p202408 VALUES LESS THAN (to_days('2024-09-01')),
PARTITION p202409 VALUES LESS THAN (to_days('2024-10-01')),
PARTITION p202410 VALUES LESS THAN (to_days('2024-11-01')),
PARTITION p202411 VALUES LESS THAN (to_days('2024-12-01')),
PARTITION p201412 VALUES LESS THAN (to_days('2025-01-01')),
PARTITION p201501 VALUES LESS THAN (to_days('2025-02-01')),
PARTITION p202502 VALUES LESS THAN (to_days('2025-03-01')),
PARTITION p202503 VALUES LESS THAN (to_days('2025-04-01')),
PARTITION p202504 VALUES LESS THAN (to_days('2025-05-01')),
PARTITION p202505 VALUES LESS THAN (to_days('2025-06-01')),
PARTITION p202506 VALUES LESS THAN (to_days('2025-07-01')),
PARTITION p202507 VALUES LESS THAN (to_days('2025-08-01')),
PARTITION p202508 VALUES LESS THAN (to_days('2025-09-01')),
PARTITION p202509 VALUES LESS THAN (to_days('2025-10-01')),
PARTITION p202510 VALUES LESS THAN (to_days('2025-11-01')),
PARTITION p202511 VALUES LESS THAN (to_days('2025-12-01')),
PARTITION p202512 VALUES LESS THAN (to_days('2026-01-01')),
PARTITION p202601 VALUES LESS THAN (to_days('2026-02-01')),
PARTITION p202602 VALUES LESS THAN (to_days('2026-03-01')),
PARTITION p202603 VALUES LESS THAN (to_days('2026-04-01')),
PARTITION p202604 VALUES LESS THAN (to_days('2026-05-01')),
PARTITION p202605 VALUES LESS THAN (to_days('2026-06-01')),
PARTITION p202606 VALUES LESS THAN (to_days('2026-07-01')),
PARTITION p202607 VALUES LESS THAN (to_days('2026-08-01')),
PARTITION p202608 VALUES LESS THAN (to_days('2026-09-01')),
PARTITION p202609 VALUES LESS THAN (to_days('2026-10-01')),
PARTITION p202610 VALUES LESS THAN (to_days('2026-11-01')),
PARTITION p202611 VALUES LESS THAN (to_days('2026-12-01')),
PARTITION p202612 VALUES LESS THAN (to_days('2027-01-01')),
PARTITION p202701 VALUES LESS THAN (to_days('2027-02-01')),
PARTITION p202702 VALUES LESS THAN (to_days('2027-03-01')),
PARTITION p202703 VALUES LESS THAN (to_days('2027-04-01')),
PARTITION p202704 VALUES LESS THAN (to_days('2027-05-01')),
PARTITION p202705 VALUES LESS THAN (to_days('2027-06-01')),
PARTITION p202706 VALUES LESS THAN (to_days('2027-07-01')),
PARTITION p202707 VALUES LESS THAN (to_days('2027-08-01')),
PARTITION p202708 VALUES LESS THAN (to_days('2027-09-01')),
PARTITION p202709 VALUES LESS THAN (to_days('2027-10-01')),
PARTITION p202710 VALUES LESS THAN (to_days('2027-11-01')),
PARTITION p202711 VALUES LESS THAN (to_days('2027-12-01')),
PARTITION p202712 VALUES LESS THAN (to_days('2028-01-01')),
PARTITION p202801 VALUES LESS THAN (to_days('2028-02-01')),
PARTITION p202802 VALUES LESS THAN (to_days('2028-03-01')),
PARTITION p202803 VALUES LESS THAN (to_days('2028-04-01')),
PARTITION p202804 VALUES LESS THAN (to_days('2028-05-01')),
PARTITION p202805 VALUES LESS THAN (to_days('2028-06-01')),
PARTITION p202806 VALUES LESS THAN (to_days('2028-07-01')),
PARTITION p202807 VALUES LESS THAN (to_days('2028-08-01')),
PARTITION p202808 VALUES LESS THAN (to_days('2028-09-01')),
PARTITION p202809 VALUES LESS THAN (to_days('2028-10-01')),
PARTITION p202810 VALUES LESS THAN (to_days('2028-11-01')),
PARTITION p202811 VALUES LESS THAN (to_days('2028-12-01')),
PARTITION p202812 VALUES LESS THAN (to_days('2029-01-01')),
PARTITION p2029 VALUES LESS THAN (MAXVALUE) )
;

参考资料

https://blog.csdn.net/liming89/article/details/124343073

https://www.yzktw.com.cn/post/526099.html

https://www.cnblogs.com/wangbin2188/p/16710730.html

https://www.jb51.net/article/244256.htm

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

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

相关文章

《异常检测——从经典算法到深度学习》24 用于单变量时间序列异常检测的端到端基准套件

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

视频生成的发展史及其原理解析:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0

前言 考虑到文生视频开始爆发&#xff0c;比如11月份就是文生视频最火爆的一个月 11月3日&#xff0c;Runway的Gen-2发布里程碑式更新&#xff0c;支持4K超逼真的清晰度作品(runway是Stable Diffusion最早版本的开发商&#xff0c;Stability AI则开发的SD后续版本)11月16日&a…

2023软件测试大赛总结

2023软件测试大赛总结 文章目录 2023软件测试大赛总结软件下载方式比赛方式个人总结断言使用java基础 预选赛省赛国赛 软件下载方式 进入官网下载插件&#xff08;直接下载一个完整的Eclipse就可以,这样比较方便&#xff09; 需要保证jdk版本和要求的一致&#xff0c;不然可能…

idea不需安装插件,自动生成mybatis-plus对应的实体类entity,带注解@TableName、@TableId、@TableField

目录 1、修改Generate poJOs.groovy文件 2、idea中连接数据库 3、生成entity代码 4、查看生成的实体类 1、修改Generate poJOs.groovy文件 在项目下方点击Scratches and Consoles→ Extensions→ Database Tools and SQL箭头→schema→ Generate POJOs.groovy 替换为以下文…

【前沿技术】扩散模型是什么

0. 前言 扩散模型的灵感来自非平衡热力学。他们定义了一个马尔可夫扩散步骤链&#xff0c;以缓慢地将随机噪声添加到数据中&#xff0c;然后学习逆转扩散过程以从噪声中构建所需的数据样本。与VAE或流动模型不同&#xff0c;扩散模型是通过固定程序学习的&#xff0c;并且潜在变…

十大经典系统架构设计面试题

十大经典系统架构设计面试题_架构_程序员石磊_InfoQ写作社区翻译自&#xff1a;https://medium.com/geekculture/top-10-system-design-interview-questions-10f7b5ea123d在我作为微软和Facebhttps://xie.infoq.cn/article/4c0c9328a725a76922f6547ad 任何 SDI 问题的提示 通过…

EasyMetagenome易宏基因组——简单易用的宏基因组分析流程-来自刘永鑫团队的秘密武器

原仓库地址如下&#xff0c;github有时候无法访问&#xff0c;等一段时间再试就行&#xff1a; YongxinLiu/EasyMetagenome: Easy Metagenome Pipeline (github.com) 相关文章&#xff0c;看文章更清晰这个可干啥&#xff1a; EasyAmplicon: An easy‐to‐use, open‐source…

深入了解汉字转拼音转换工具:原理与应用

一、引言 汉字作为世界上最古老、最具象形意的文字之一&#xff0c;承载了数千年的历史文明。然而&#xff0c;在现代信息技术环境下&#xff0c;汉字的输入、输出和检索等方面存在一定的局限性。拼音作为汉字的一种音标表达方式&#xff0c;能够有效地解决这些问题。本文将为…

C++:C++11新特性--lambda表达式和包装器

文章目录 lambda表达式lambda表达式的使用规则lambda表达式的用法lambda表达式的理解函数对象和lambda表达式 包装器bind lambda表达式 首先介绍什么是lambda表达式&#xff0c;在介绍这个情景前&#xff0c;可以回忆一下算法库中的sort排序&#xff1a; // lambda表达式 voi…

Git 标签管理

前言 标签 tag&#xff0c;就相当于对 某一次的 commit 做一个标识&#xff0c;起了一个别名&#xff0c;例如&#xff1a;在某个项目发布版本的时候&#xff0c;可针对最后一次 commit 起一个别名 v1.0 来标识这一次的commit。tag 的作用&#xff1a;commit id 相对于 tag 是很…

机械专业个人简历17篇

以下简历内容以机械专业相关岗位招聘需求为背景&#xff0c;我们整理了17篇且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴&#xff0c;助理大家在众多候选人中脱颖而出。 机械专业简历模板下载&#xff08;可在线编辑制作&#xff09;&#xff1a;来幻主简历&#xf…

GEE:均值滤波

作者:CSDN @ _养乐多_ 本文将介绍在 Google Earth Engine(GEE)平台上,进行均值滤波操作的代码框架、核心函数和多种卷积核。 并分别以林地区域和农田区域为试验区,以NDVI图像为例。结果如下图所示, 文章目录 一、均值滤波二、完整代码三、代码链接一、均值滤波 均值滤…

Git指南:掌握基础操作,高效管理代码

Git初学者指南&#xff1a;掌握基础操作&#xff0c;高效管理代码 Git作为当前最流行的版本控制系统&#xff0c;对于软件开发者来说是必备技能。无论是个人项目还是团队合作&#xff0c;Git都能提供高效的代码管理和协作支持。本文旨在帮助Git新手快速熟悉其基础操作。 1. G…

CTF-PWN-堆-【malloc和free的工作流程】

文章目录 关于ptmalloc的思考缓存思想 chunk结构large bin补充fast bin 补充unsorted bin 补充top chunk 补充mmaped chunk补充Last remainder补充last remainder的产生 malloc_state补充mmap收缩阈值mmap分配阈值ptmalloc响应用户内存分配要求工作流程free时工作流程 大佬的关…

【Delphi】实现彩色日志显示框

目录 一、前言 二、实现方法 1. 第一步 2. 第二步 3. 第三步 三、主程序代码 四、下载 1. 可执行程序 2. 程序源代码 一、前言 在用Delphi做日常开发的时候&#xff0c;经常需要显示程序运行的日志&#xff0c;一般我们会使用TMemo&#xff0c;使用起来简单&#xff0c…

java 线程池的使用

线程池的分类 在 Java 中&#xff0c;常用的线程池有以下几种&#xff1a; ThreadPoolExecutor&#xff1a;ThreadPoolExecutor 是 Java 提供的最基本的线程池实现。它提供了丰富的参数配置&#xff0c;可以自定义核心线程数、最大线程数、线程空闲时间、工作队列等。 Execut…

ElementPlus中 使用ElLoading.service, spinner: ‘el-icon-loading‘不生效

let downloadLoadingInstance ElLoading.service({ text: "正在下载数据&#xff0c;请稍候",spinner: el-icon-loading, background: "rgba(0, 0, 0, 0.7)", })使用以上代码时&#xff0c;加载的圆圈出不来&#xff0c;使用f12查看&#xff0c;即使能出…

BEVFormer环境配置

官网的教程说是Step By Step&#xff0c;但是实际上我按照步骤安装下来运行不了&#xff08;BEVFormer GitHub地址&#xff09;。主要是安装后关于包依赖产生的某些错误&#xff0c;特别是安装nuscenes-devkit没有在步骤中列出来&#xff0c;后面就不好解决某些包的版本依赖了。…

Nginx的缓存配置与其他配置

一、Nginx的缓存配置 http {server {#设置缓存的通配符&#xff0c;只要满足后缀是jpg或png或swf或gif的就进行缓存&#xff08;意思就>是当用户浏览网页时&#xff0c;会将网页上所有jpg或png或swf或gif都缓存起来&#xff0c;下次用户再次访问的时候就直接从本地加载图片…

代币化对网约车区块链平台的影响

The effects of tokenization on ride-hailing blockchain platforms 再一次分析一下一篇关于区块链的文章&#xff0c;这篇文章比较新&#xff0c;2023年发表在POMS上。 由于这篇文章跟之前那几篇关注假货的文章的重点不一样&#xff0c;所以需要仔细读一下他的INTRODUCTION…