MySQL的分割槽 分表 集群

2021-08-31 03:14:36 字數 2572 閱讀 5060

檢視mysql表分割槽語句

select

partition_name part,

partition_expression expr,

partition_description descr,

table_rows

from

information_schema.partitions

where

table_schema = schema()

and table_name=『表名』;

1.2.

3.4.每天定時新增刪除分割槽

參考 裡面日期應該和檔名差一天,有點問題)

下面是我的:

delimiter $$

usemydb$$

drop procedure if existscreate_partition_3ahuadan$$

create procedurecreate_partition_3ahuadan()

begin

/* 事務回滾,其實放這裡沒什麼作用,alter table是隱式提交,回滾不了的。*/

declare exit handler for sqlexception rollback;

start transaction;

/* 到系統表查出這個表的最大分割槽,得到最大分割槽的日期。在建立分割槽的時候,名稱就以日期格式存放,方便後面維護 /

select replace(partition_name,『p』,』』) into @p12_name from information_schema.partitions

where table_name=『vote_record_memory』 order by partition_ordinal_position desc limit 1;

set @max_date= date(date_add(@p12_name+0, interval 1 day))+0;

set @max_date2= date(date_add(@max_date+0, interval 1 day))+0;

/ 修改表,在最大分割槽的後面增加乙個分割槽,時間範圍加1天 /

set @s1=concat(『alter table vote_record_memory add partition (partition p』,@max_date,』 values less than (to_days (』』』,date(@max_date2),』』』)))』);

/ 輸出檢視增加分割槽語句*/

select @s1;

prepare stmt2 from @s1;

execute stmt2;

deallocate prepare stmt2;

/* 取出最小的分割槽的名稱,並刪除掉 。

注意:刪除分割槽會同時刪除分區內的資料,慎重 /

select partition_name into @p0_name from information_schema.partitions

where table_name=『vote_record_memory』 order by partition_ordinal_position limit 1;

set @s=concat('alter table vote_record_memory drop partition ',@p0_name);

prepare stmt1 from @s;

execute stmt1;

deallocate prepare stmt1;

/ 提交 */

commit ;

end$$

delimiter ;

呼叫參考

delimiter ||

create event partition_3ahuadan_event

on schedule

every 1 day starts 『2018-11-08 00:48:00』

dobegin

call mydb.create_partition_3ahuadan;

end ||

delimiter ;

解釋:從2018-11-08開始,每天在 00:48:00進行一次呼叫。如果再do之前加上on completion not preserve 則只執行一次(on completion not preserve )

使用這個功能之前必須確保event_scheduler已開啟,可執行

set global event_scheduler = 1;

或set global event_scheduler = on;

來開啟,也可以直接在啟動命令加上「–event_scheduler=1」,例如:

mysqld … --event_scheduler=1

要檢視當前是否已開啟事件排程器,可執行如下sql:

show variables like 『event_scheduler』;

或select @@event_scheduler;

或show processlist;

《Mysql 分區分表》

一 分割槽 分表 為了什麼?當mysql單錶的資料量過大時,資料庫的訪問速度會下降,需要處理大量資料,所以需要把資料分散儲存。常用 水平 切分 二 mysql常見的水平切分方案有哪些?分庫分表 分割槽表 三 分庫分表?把乙個很大的庫 表 的資料分到幾個庫 表 中,每個庫 表 的結構都相同,但他們可以...

分區分表 一

1.為什麼要分表和分割槽?日常開發中我們經常會遇到大表的情況,所謂的大表是指儲存了百萬級乃至千萬級條記錄的表。這樣的表過於龐大,導致資料庫在查詢和插入的時候耗時太長,效能低下,如果涉及聯合查詢的情況,效能會更加糟糕。分表和表分割槽的目的就是減少資料庫的負擔,提高資料庫的效率,通常點來講就是提高表的增...

mysql分片 分割槽 mysql分割槽 分片

range分割槽案例 按照日期的年分表,通過year函式獲取分割槽鍵的具體年份,values less 表示少於1991年的放入p0,類推 時間函式,to days和 to seconds 我當前版本5.5支援 可以讓你更精確的分到天甚至秒.partition p3 values less than...