mysql增加分区表
概述简单分享下最近做的一个mysql数据库分区表改造方案,仅供参考。思路:(假设在2020.7.21进行表分区改造)没时间,就不画图说明了1、创建与原始表一样结构的新表,新分区2、往新表插入旧表在20...
2024.11.15对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成,实现分区的代码实际上是通过对一组底层表的对象封装,但对SQL层来说是一个完全封装底层的黑盒子。
MySQL实现分区的方式也意味着索引也是按照分区的子表定义,没有全局索引。
分区的意思是指将同一表中不同行的记录分配到不同的物理文件中,几个分区就有几个.idb文件。MySQL数据库的分区是局部分区索引,一个分区中既存了数据,又放了索引。也就是说,每个区的聚集索引和非聚集索引都放在各自区的(不同的物理文件)。
分区表的好处是1、可以让单表存储更多的数据。
2、分区表的数据更容易维护,可以通过删除与那些数据有关的分区,更容易删除数据,也可以增加新的分区来支持新插入的数据。另外,还可以对一个独立分区进行优化、检查、修复等操作。
3、部分查询能够从查询条件确定只落在少数分区上,查询速度会很快。
4、通过跨多个磁盘来分散数据查询,来获得更大的查询吞吐量。
新建分区表-- 假设有个表叫tmp_logs,设置分区条件为按end_time按月分区drop TABLE IF EXISTS `tmp_logs`;CREATE TABLE `tmp_logs` (`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,`start_time` datetime NOT NULL,`end_time` datetime NOT NULL,`memo` varchar(128) CHARACTER SET utf8mb4 NOT NULL,PRIMARY KEY (`id`,`end_time`)) ENGINE=InnoDB DEFAULT CHARSET=utf8PARTITION BY RANGE (TO_DAYS(end_time))(PARTITION p_202112 VALUES LESS THAN (TO_DAYS(‘2022-01-01‘)),PARTITION p_202201 VALUES LESS THAN (TO_DAYS(‘2022-02-01‘)),PARTITION p_202202 VALUES LESS THAN (TO_DAYS(‘2022-03-01‘)),PARTITION p_202203 VALUES LESS THAN (TO_DAYS(‘2022-04-01‘)));存储过程,每月创建新的分区-- create_table_partition 为创建表分区,调用后为该表创建到下月结束的表分区delimiter $drop PROCEDURE IF EXISTS create_table_partition$CREATE PROCEDURE `create_table_partition`(IN `table_name` varchar(64))BEGINSET @next_month = concat(date_format(date_add(now(),interval 2 month),‘%Y-%m‘),‘-01‘);SET @next_p = concat(date_format(date_add(now(),interval 1 month),‘%Y%m‘) );SET @SQL = concat( ‘ALTER TABLE `‘, table_name, ‘`‘, ‘ ADD PARTITION (PARTITION p_‘, @next_p, " VALUES LESS THAN (TO_DAYS(‘", @next_month ,"‘)) );" );PREPARE STMT FROM @SQL;EXECUTE STMT;DEALLOCATE PREPARE STMT;END$delimiter ;存储过程,删除历史分区,空间回收-- delete_table_partition 为删除N月前的表分区,方便历史数据空间回收delimiter $drop PROCEDURE IF EXISTS delete_table_partition$CREATE PROCEDURE `delete_table_partition`(`str_table_name` VARCHAR(64),`int_reserved_month` INT)BEGINdeclare str_part_name VARCHAR(64);declare done INT DEFAULT 0;declare cursor1 CURSOR FOR select partition_name from information_schema.partitions where table_schema = ‘webrtc‘and table_name=str_table_name and partition_description概述简单分享下最近做的一个mysql数据库分区表改造方案,仅供参考。思路:(假设在2020.7.21进行表分区改造)没时间,就不画图说明了1、创建与原始表一样结构的新表,新分区2、往新表插入旧表在20...
2024.11.15MySql分区、分表和分库数据库的数据量达到一定程度之后,为避免带来系统性能上的瓶颈。需要进行数据的处理,采用的手段是分区、分片、分库、分表。一些问题的解释:1.为什么要分表和分区?日常开发中我们经常...
2024.11.13原文地址:https://github.com/doocs/advanced-java面试题你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解...
2024.11.13平时工作中所遇到的问题,今天为大家整理一下,废话不多说,直接上代码建立存储过程后,需创建Mysql定时任务,来每天自动执行,我自动的版本,默认晚上11点自动调用存储过程注:如表中存在数据,必须手动对已...
2024.11.12作者:GrimMjx来源: cnblogs.com/GrimMjx/p/10526821.html一.InnoDB逻辑存储结构首先要先介绍一下InnoDB逻辑存储结构和区的概念,它的所有数据都被逻辑地...
2024.11.12