Mysql分區(qū)創(chuàng)建與刪除方式
更新時(shí)間:2025年02月11日 09:34:22 作者:Donnedaen
本文詳細(xì)介紹了如何在MySQL中創(chuàng)建和刪除分區(qū)的實(shí)例代碼,通過實(shí)際操作示例,幫助讀者理解分區(qū)的創(chuàng)建與管理方法,從而更好地優(yōu)化數(shù)據(jù)庫(kù)性能
Mysql分區(qū)創(chuàng)建與刪除
實(shí)例代碼
CREATE PROCEDURE `add_table_partition`()
COMMENT '增加表分區(qū)'
BEGIN
/******************************************************************
* Creator: Donne
* Create Date: 2019-05-29
* Description: 增加所有表的分區(qū),分區(qū)類型為p_date_20190529
每月最后一天執(zhí)行,生成下一個(gè)月所有分區(qū)
******************************************************************/
DECLARE v_table_name varchar(50);
DECLARE v_par_name varchar(20);
DECLARE i int DEFAULT 0;
DECLARE no_more int DEFAULT 0;
##將表名和分區(qū)名放入游標(biāo)
DECLARE cursor_employee CURSOR FOR
SELECT table_name,max(partition_name)
FROM information_schema.partitions
WHERE table_schema='test' and partition_name is not null and partition_name<>'p_date_min'
GROUP BY table_name;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more= 1;
##打開游標(biāo)
OPEN cursor_employee;
FETCH cursor_employee INTO v_table_name,v_par_name;
##循環(huán) 1:ture, 0:false,!0:ture,!1:false
##select 1 from where !0
WHILE !no_more DO
my_loop: LOOP
##從當(dāng)前開始
SET @j:= DATE_ADD(curdate(),INTERVAL i DAY);
##下個(gè)月最后一天
SET @end_date:= last_day(DATE_ADD(last_day(curdate()),INTERVAL 1 DAY));
IF @j > @end_date THEN
LEAVE my_loop;
END IF;
#計(jì)數(shù)
SET i=i+1;
#分區(qū)使用values less than,所以+1
SET @par_value:= UNIX_TIMESTAMP(DATE_ADD(curdate(),INTERVAL i DAY));
SET @par_name:= concat('p_date_',date_format(@j,'%Y%m%d'));
#如果新建分區(qū)大于已有分區(qū),則創(chuàng)建
IF @par_name>v_par_name THEN
SET @add_par:= concat('ALTER TABLE ',v_table_name,' ADD PARTITION(PARTITION ',@par_name,' VALUES LESS THAN (',@par_value,'));');
PREPARE stmt from @add_par;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
END LOOP;
#重新計(jì)數(shù)
SET i= 0;
#從游標(biāo)中取出下一條數(shù)據(jù)
FETCH cursor_employee INTO v_table_name,v_par_name;
END WHILE;
CLOSE cursor_employee;
END
CREATE PROCEDURE `drop table partition`(
in start_date date ,
in end_date date
)
COMMENT '刪除分區(qū)'
BEGIN
/******************************************************************
* Creator: Donne
* Create Date: 2019-05-29
* Description: 刪除表分區(qū)
******************************************************************/
DECLARE v_table_name varchar(50);
DECLARE v_par_name varchar(20);
DECLARE i int DEFAULT 0;
DECLARE no_more int DEFAULT 0;
##將表名和分區(qū)名放入游標(biāo)
DECLARE cursor_employee CURSOR FOR
SELECT table_name,partition_name
FROM information_schema.partitions
WHERE table_schema='test' and partition_name is not null and partition_name<>'p_date_min'
AND partition_name>=concat('p_date_',date_format(end_date,'%Y%m%d'))
AND partition_name<=concat('p_date_',date_format(end_date,'%Y%m%d'));
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more= 1;
##打開游標(biāo)
OPEN cursor_employee;
FETCH cursor_employee INTO v_table_name,v_par_name;
##循環(huán)
WHILE !no_more DO
SET @drop_par:= concat('ALTER TABLE ',v_table_name,' DROP PARTITION ',v_par_name,';');
PREPARE stmt from @drop_par;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
FETCH cursor_employee INTO v_table_name,v_par_name;
END WHILE;
CLOSE cursor_employee;
END
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
記一次mysql5.7測(cè)試數(shù)據(jù)庫(kù)被刪表的問題
這篇文章主要介紹了記一次mysql5.7測(cè)試數(shù)據(jù)庫(kù)被刪表的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
mysql大數(shù)據(jù)查詢優(yōu)化經(jīng)驗(yàn)分享(推薦)
這篇文章主要介紹了mysql大數(shù)據(jù)查詢優(yōu)化經(jīng)驗(yàn)分享,真的是正兒八經(jīng)的mysql優(yōu)化技巧,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-03-03
Mysql8創(chuàng)建用戶以及賦權(quán)操作過程
文章詳細(xì)介紹了MySQL 8中創(chuàng)建用戶、賦權(quán)及權(quán)限管理的操作步驟,包括創(chuàng)建不限制IP的用戶、賦權(quán)數(shù)據(jù)庫(kù)所有表、使用WITH GRANT OPTION傳遞權(quán)限、刷新權(quán)限、撤銷權(quán)限、刪除用戶等,同時(shí)強(qiáng)調(diào)了權(quán)限修改后需刷新及注意權(quán)限繼承關(guān)系2025-07-07
MySQL數(shù)據(jù)庫(kù)執(zhí)行Update卡死問題的解決方法
最近開發(fā)的時(shí)候debug到一條update的sql語句時(shí)程序就不動(dòng)了,然后我就在plsql上試了一下,發(fā)現(xiàn)plsql一直在顯示正在執(zhí)行,等了好久也不出結(jié)果,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)執(zhí)行Update卡死問題的解決方法,需要的朋友可以參考下2022-05-05
MySQL數(shù)據(jù)庫(kù)的出錯(cuò)代碼列表
2008-01-01
Mysql中條件字段有索引,但使用不了索引的幾種場(chǎng)景詳解
這篇文章主要介紹了Mysql中條件字段有索引,但使用不了索引的幾種場(chǎng)景,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04

