MySQL資料庫按月分表

2021-10-02 23:16:37 字數 1519 閱讀 7247

在系統做日誌記錄的時候採用mysql資料庫,由於日誌資料量較大,採用按月分表的形式進行處理。

每個月的開始都要建立一張以月為單位的新表來儲存過去乙個月的資料。有一張表的表名是一直不變的,這張表是用來暫時儲存新的乙個月的資料的。

現在有一張表my_table ,前月份的資料就暫時儲存在這張表中,首先需要將my_table表進行重新命名。

rename table my_table to table_2020_02;
這時候重新命名了my_table這張表,但是原來的my_table這張表還是存在的,只不過所有的資料都已經儲存在table_2020_02這張表上了。

用rename進行批處理的好處,大量的資料不需要進行匯出和匯入的操作,那樣效率會很低,而且對資料庫造成的壓力會很大。

在重新命名了my_table這張表後需要重新要建立my_table這張表,creat my_table (…)。

1、首先要保證event事件是開啟狀態,預設情況下是關閉的。

set global event_scheduler=1;

或者 set global event_scheduler=no;

2、用儲存過程實現分表

/* 用於按日期分表,先將 原表 修改表名為 表名+日期,複製修改後的表 為原表名 */

delimiter //

create procedure copytable (var varchar(20))

begin

set @pddl = concat('alter table ', var, ' rename ', var, date_format(now(), '%y_%m'));

prepare stmt from @pddl;

execute stmt;

deallocate prepare stmt;

set @pdd2 = concat('create table ', var, ' like ', var, date_format(now(), '%y_%m'));

prepare stmt1 from @pdd2;

execute stmt1;

deallocate prepare stmt1;

end//

delimiter ;

create event copytable_event

on schedule every 1 month starts '2019-04-01 00:00:02'

on completion preserve disable //表示建立後並不開始生效

do call copytable("member"); //該event(事件)的操作內容

alter event copytable_event on completion preserve enable; //開啟已經建立好的事件

:將倒數第二行do call copytale(「member」)中的member替換為你的表名

按月分表(create table)

php 按月分表控制台命令 yii2版 purpose 按月分表指令碼 user chrdai date 2019 3 19 time 15 23 useyii console controller class createtablecontroller extends controller pur...

mysql 按月分表的查詢 mysql分表 查詢

標籤 垂直分表 其實沒啥好講,就是 主鍵 常用列放在原表中,再講 主鍵 一些不常用列放在另外的表中。這樣乙個資料頁就可以存放更多資料。但是缺點也明顯,可能會增加join 或 union之類的操作。水平分表 今天面試被問到水平分表,突然愣住了,分都知道,但分完如何有效查詢就不好說了。原則 具體情況具體...

mssql 2000 按月分割槽表 來於網路

建立 create procedure sp records year nvarchar 4 as declare count int,yearmonth nvarchar 6 month nvarchar 2 set count 0 while count 12 begin set count c...