Mysql按天自动表分区教程

前言

在使用mysql时,往往用一张表来存放数据,不同的业务可能产生的数据量也不同,有的业务可能一天需要插入几万条数据,也有的则更多,即使量很小日积月累数据库表的数据堆积也会越来越多,需要人工去删除数据,当数据达到百万或千万级别时,mysql查询速度明显下降,性能也随之下降,解决该问题的办法有很多,比如添加索引、优化SQL,但这都只是治标不治本的做法,无法从根本上提高Mysql的性能和查询速度。

什么是表分区?

mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存表索引的。如果一张表的数据量太大的话,那么myd,myi就会变的很大,查找数据就会变的很慢,这个时候我们可以利用mysql的分区功能,在物理上将这一张表对应的三个文件,分割成许多个小块,这样呢,我们查找一条数据时,就不用全部查找了,只要知道这条数据在哪一块,然后在那一块找就行了。如果表的数据太大,可能一个磁盘放不下,这个时候,我们可以把数据分配到不同的磁盘里面去。

表分区,是指根据一定规则,将数据库中的一张表分解成多个更小的,容易管理的部分。从逻辑上看,只有一张表,但是底层却是由多个物理分区组成。

创建测试表

CREATE TABLE `dcdlqx` (
  `u_time` int(11) NOT NULL COMMENT '采集时间',
  `zh_order` tinyint(4) NOT NULL COMMENT '道岔方向',
  KEY `index_utime` (`u_time`) USING BTREE
) ENGINE=MyISAM CHARSET=utf8 ROW_FORMAT=COMPRESSED COMMENT='道岔电流曲线';

手动进行分区

对自动分区的表必须是在该表有手动分区的前提之下才能进行; 对以下代码稍做解释,less than 的意思是小于的意思,所以p20230919这个分区里面存放的数据都是比2023年09月19日之前的数据,以此类推,p20230920存放的是09月20日的数据。

命令说明#单条增加分区

ALTER TABLE dcdlqx ADD PARTITION (PARTITION p20230919 VALUES LESS THAN(UNIX_TIMESTAMP('2023-09-19')));

命令说明#删除分区命令

ALTER TABLE dcdlqx DROP PARTITION p20230919;

命令说明#查看表分区

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值