当前位置: 首页 > news >正文

mysql表分区

本文简述了mysql表分区的作用和特点,又演示了mysql表分区的创建过程,详细演示了指定不同分区目录时的处理办法。由于表分区对crud操作是透明的,对于普通开发同学其实不用过多关注,但是本着学习的态度,在分库分表等高大上的技术面前,mysql分区技术依然是一个不可或缺的提升数据库读写能力的关键技术。

1、mysql分区的简单介绍

mysql分区就是将表的数据按照特定规则存放在不同的区域,也就是将表的数据文件分割成多个小块,在查询数据的时候,只要知道数据数据存储在哪些区域,然后直接在对应的区域进行查询,不需要对表数据进行全部的查询,提高查询的性能。同时,如果表数据特别大,一个磁盘磁盘放不下时,我们也可以将数据分配到不同的磁盘去,解决存储瓶颈的问题,利用多个磁盘,也能够提高磁盘的IO效率,提高数据库的性能。

1.1、mysql表分区的特点

  • 物理存储与逻辑分割:逻辑上数据的crud用户感觉不出表分区的存在,物理上数据按照分区键被分配到不同的分区里。
  • 查询性能提升:查询时,mysql能够确定读取那些分区的数据,不用全表扫描。
  • 数据管理与维护:分区可以独立备份、恢复,无需对整表操作。
  • 扩展性与并行处理:当表的大小超过单个存储设备的容量时,很容易扩展到多个存储设备。

1.2、分区的类型

  • RANGE:基于列的值范围将数据分配到不同的分区。比如可以根据日期范围将数据分配到不同的月份、年份的分区中。
  • LIST:基于列的离散值集合来分配数据的。对应的列的数据是一个类似枚举型的数据。
  • HASH:根据用户指定的列的hash值分配数据。
  • KEY:类似于HASH,但支持多列。

大家对先表分区有个认识后,下面咱们就开始实操一下。

2、操练

2.1、创建表分区

create table t_member(
	member_id int not null,
	member_name varchar(60),
	member_phone varchar(20),
	create_time datetime,
	update_time datetime
) PARTITION BY RANGE (YEAR(create_time)) (
	PARTITION P1 VALUES LESS THAN (2024),
	PARTITION P2 VALUES LESS THAN (2025),
	PARTITION P3 VALUES LESS THAN MAXVALUE 

);

不多解释了,sql语句还是比较容易理解。上面我创建了3个分区,咱们到服务器上看看数据文件,如下图:

在这里插入图片描述
目前是在一个目录中,如果你的系统有多个硬盘,把数据文件分别放在不同的硬盘上,那肯定会提高读写性能。下面咱们模拟一下过程。因为有些坑大家要避免

2.2、创建表分区,使用不同的数据目录

我们从一个简单的创建sql开始。

create table t_member32(
	member_id int not null,
	member_name varchar(60),
	member_phone varchar(20),
	create_time datetime,
	update_time datetime
) PARTITION BY RANGE (YEAR(create_time)) (
	PARTITION P1 VALUES LESS THAN (2024) DATA DIRECTORY = '/home/jackie',
	PARTITION P2 VALUES LESS THAN (2025) DATA DIRECTORY = '/mydata',
	PARTITION P3 VALUES LESS THAN MAXVALUE 

);

其实就是在刚才的sql的基础上(表名改了),为三个分区分配了三个不同的目录。p1、p2指定,p3明确指定存放目录,那就是保存在默认的目录里。

直接执行肯定会报错,因为p1、p2目录mysql不知道,要先让mysql知道这两个目录,也就是说不能随便指定一个操作系统的目录。下来咱们处理这个问题。

2.2.1 配置my.cnf

在my.cnf,找到“mysqld”段,加入下面配置(我就按上面sql写了):
在这里插入图片描述
注意:多个目录“;”号分割。保存后重启mysql,依然报错。还没完,咱们继续。

2.2.2 将目录的owner设置成mysql

管理员登录,设置/home/jackie和/mydata的owner。你的机器上要是还没有这两个目录就先新建一下。

chown mysql:mysql /home/jackie
chown mysql:mysql /mydata

此时还不行,执行刚才的sql语句时,会报存储引擎错误。

2.2.3、配置apparmor

apparmor是linux的一个安全组件,有兴趣大家去查查。咱们修改apparmor的配置:

sudo vim /etc/apparmor.d/usr.bin.mysqld

添加如下配置:

在这里插入图片描述
保存退出后,重新加载apparmor配置并重启,命令如下:

sudo systemctl reload apparmor.service 
sudo systemctl restart apparmor.service 

再次执行上面的创建语句,就能执行成功了。数据文件也按我们的规划放到了指定的区域。

在这里插入图片描述
这是/home/jackie目录的数据文件。其他的普通sql操作就不演示了,和普通表的操作一模一样。如果要在分区后继续新增分区、删除分区、合并分区大家可以看看mysql的文档,这里就不啰嗦了。

好了,大家试试,希望能在工作中对你有帮助。
//~~

相关文章:

  • EP 架构:未来主流方向还是特定场景最优解?
  • 为什么用源码搭建体育比分网直播更加高效
  • 网络编程 day02
  • 【人造稀缺性的资本围猎场】
  • 汽车智能钥匙中PKE低频天线的作用
  • Centos7服务器防火墙设置教程
  • 【AI Guide】AI面试攻略只用看这一篇就够了!力争做全网最全的AI面试攻略——大模型(三十二)Zero-shot
  • DeepSeek 智慧城市应用:交通流量预测(918)
  • 《Canvas修仙传·第四重天元婴境(上集)》 ——WebGL虚空造物与Three.js破碎虚空之法
  • PH热榜 | 2025-03-04
  • 第40天:安全开发-JavaEE应用SpringBoot框架JWT身份鉴权打包部署JARWAR
  • 神码AC-AP无线部署
  • k8s面试题总结(八)
  • 大模型在高血压预测及围手术期管理中的应用研究报告
  • yum源选要配置华为云的源,阿里云用不了的情况
  • 恒流驱动革新:ZCC6303凭实力替代SY7301
  • MyBatis - 单元测试 参数传递 注解 CRUD
  • 大牛证券|光伏回收产业站上风口 千亿元市场空间待释放
  • GBT32960 协议编解码器的设计与实现
  • Rust WebAssembly 入门教程
  • 济南历城区网站建设/莱阳seo外包
  • wordpress gb2312/长沙企业关键词优化哪家好
  • 网站备案流程实名认证/杭州关键词排名提升
  • 专门做房产的网站/资源搜索神器
  • 兴安盟做网站公司/阿里巴巴推广
  • 广州建设网站下载/cilimao磁力猫在线搜索