前提:
test為資料庫名
ip_demo為表名
建立分割槽
alter
table ip_demo partition by range(to_days(date))
(partition p20180716 values less than (to_days('2018-07-17'))
)
注意:這裡date必須為主鍵,否則建立失敗。但是在表中不設定主鍵的時候,同樣可以新建分割槽成功
檢視當前表的分割槽資訊
select partition_name,subpartition_name,table_rows
from information_schema.`partitions`
where table_name = 'ip_demo';
新建分割槽儲存過程
delimiter $$
/*test為資料庫名*/
use `test`$$
/* 刪除儲存過程,確保新建成功*/
drop
procedure
ifexists
`create_partition_ip`$$
create definer=`root`@`localhost`
procedure
`create_partition_ip`()
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='ip_demo'
order
by partition_ordinal_position desc limit 1;
set @max_date= date(date_add(@p12_name+0, interval
1day))+0;
set @max_date_add= date(date_add(@p12_name+0, interval
2day))+0;
/* 修改表,在最大分割槽的後面增加乙個分割槽,時間範圍加1天 */
set @s1=concat('alter table ip_demo add partition (partition p',@max_date,' values less than (to_days (''',date(@max_date_add),''')))');
/* alter table ip_demo add partition (partition p20181230 values less than (to_days ('2018-12-31')))
*//* 輸出檢視增加分割槽語句*/
select @s1;
prepare stmt2 from @s1;
execute stmt2;
deallocate prepare stmt2;
/* 取出最小的分割槽的名稱,並刪除掉 。
注意:刪除分割槽會同時刪除分區內的資料,慎重 */
/*select partition_name into @p0_name from information_schema.partitions
where table_name='tb_3a_huandan_detail' order by partition_ordinal_position limit 1;
set @s=concat('alter table tb_3a_huandan_detail drop partition ',@p0_name);
prepare stmt1 from @s;
execute stmt1;
deallocate prepare stmt1; */
/* 提交 */
commit ;
end$$
delimiter ;
檢視所有的儲存過程
show procedure
status;
檢視定時任務支援
show variables like
'event_scheduler'
/*若結果為
event_scheduler on
代表定時任務開啟
若為off則需要手動開啟
setglobal event_scheduler = on;
最好通過my.cnf配置檔案進行修改
mysqld標籤下插入
event_scheduler = on
再重啟伺服器
*/
定時執行
delimiter ||
create event partition_3ahuadan_event
on schedule
every 1
second starts '2018-07-16 11:19:59'
dobegin
call test.`create_partition_ip`;
end ||
delimiter ;
檢視所有event
show events
select * from mysql.event;
select * from information_schema.events;
刪除event
drop event if
exists partition_3ahuadan_event(event名稱)
檢視具體的查詢使用的分割槽和行數
explain partitions
select * from ip_demo
where
date between '2018-07-16'
and'2018-07-19';
刪除分割槽操作
alter
table ip_demo drop partition p2018-07-16;
參考文章
[mysql每天自動增加分割槽]:
[mysql 定時自動新增分割槽]:
mysql自動建立分割槽
call insert partition 2018 07 07 2019 01 01 儲存過程 begin declare nowdate date declare endtmp date declare dt varchar 256 declare partitiontemp varchar 2...
mysql按周自動分割槽 MySQL自動按周分割槽
我建立了乙個表來記錄我的應用程式的活動.該錶將記錄每月超過2百萬條記錄.所以我想按月或按周使用分割槽 create table if not exists ul log logid int 20 not null auto increment,logdate datetime null,assess...
MySQL每天自動增加分割槽
參考 有乙個表tb 3a huandan detail,每天有300w左右的資料。查詢太慢了,網上了解了一下,可以做表分割槽。由於資料較大,所以決定做定時任務每天執行存過自動進行分割槽。1 在進行自動增加分割槽前一定得先對錶手動分幾個區 alter table tb 3a huandan detai...