日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql按天执行分区表sql_Mysql按天自动表分区教程

發布時間:2024/1/8 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql按天执行分区表sql_Mysql按天自动表分区教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在使用mysql時,往往用一張表來存放數據,不同的業務可能產生的數據量也不同,有的業務可能一天需要插入幾萬條數據,也有的則更多,即使量很小日積月累數據庫表的數據堆積也會越來越多,需要人工去刪除數據,當數據達到百萬或千萬級別時,mysql查詢速度明顯下降,性能也隨之下降,解決該問題的辦法有很多,比如添加索引、優化SQL,但這都只是治標不治本的做法,無法從根本上提高Mysql的性能和查詢速度。

什么是表分區?

mysql數據庫中的數據是以文件的形勢存在磁盤上的,默認放在/mysql/data下面(可以通過my.cnf中的datadir來查看),一張表主要對應著三個文件,一個是frm存放表結構的,一個是myd存放表數據的,一個是myi存表索引的。如果一張表的數據量太大的話,那么myd,myi就會變的很大,查找數據就會變的很慢,這個時候我們可以利用mysql的分區功能,在物理上將這一張表對應的三個文件,分割成許多個小塊,這樣呢,我們查找一條數據時,就不用全部查找了,只要知道這條數據在哪一塊,然后在那一塊找就行了。如果表的數據太大,可能一個磁盤放不下,這個時候,我們可以把數據分配到不同的磁盤里面去。

表分區,是指根據一定規則,將數據庫中的一張表分解成多個更小的,容易管理的部分。從邏輯上看,只有一張表,但是底層卻是由多個物理分區組成。

創建測試數據庫

create database test charset=utf8;

1

創建測試表

use test;// 先切換到test數據庫

create table test_log

(

time datetime,

msg varchar(2000)

)

1

2

3

4

5

6

手動進行分區

對自動分區的表必須是在該表有手動分區的前提之下才能進行;對以下代碼稍做解釋,less than 的意思是小于的意思,所以p20191001這個分區里面存放的數據都是比2019年10月1日之前的數據,以此類推,p20191002存放的是10月1日的數據,p20191003存放的是10月2日的數據。

批量進行分區

alter table test_log partition by range columns(time)(

partition p20191001 values less than('2019-10-01'),

partition p20191002 values less than('2019-10-02'),

partition p20191003 values less than('2019-10-03'),

partition p20191003 values less than('2019-10-04')

);

1

2

3

4

5

6

單條增加分區

alter table test_log add partition (partition p20191003 values less than('2019-10-03'));

1

刪除分區命令

因為數據都是存放在一個一個的分區當中,所以當分區刪除的時間,對應的數據也會刪除,例如以下命令會把10月3日的數據刪除,可自行驗證!

alter table test_log drop partition p20191004;

1

插入數據

insert into test_log values('2019-10-01 10:11:13', 'hi');

insert into test_log values('2019-10-02 10:12:10', 'ni');

insert into test_log values('2019-10-03 10:12:10', 'hao');

1

2

3

查看表分區

select partition_name, partition_description as val from information_schema.partitions

where table_name='test_log' and table_schema='test';

1

2

創建增加分區和刪除分區代碼

注意:

1.以下代碼可以手動mysql -u root -p登錄到mysql執行

2.以下代碼有table_name和table_schema是表和數據庫名,一共6處,另外每次新增幾個分區,刪除幾個舊分區,找到相應位置,根據需要自行修改,程序員多多少少大致能看懂的。

3.執行到delimiter ;繼續按回車執行完畢,否則會出現無法執行命令的情況。

delimiter $$

DROP PROCEDURE IF EXISTS pro_test_log

$$

CREATE PROCEDURE pro_test_log()

BEGIN

DECLARE v_sysdate date;

DECLARE v_mindate date;

DECLARE v_maxdate date;

DECLARE v_pt varchar(20);

DECLARE v_maxval varchar(20);

DECLARE i int;

/*增加新分區代碼,執行時,不要復制此行*/

SELECT max(cast(replace(partition_description, '''', '') AS date)) AS val

INTO v_maxdate

FROM INFORMATION_SCHEMA.PARTITIONS

WHERE TABLE_NAME = 'test_log' AND TABLE_SCHEMA = 'test';

set v_sysdate = sysdate();

WHILE v_maxdate <= (v_sysdate + INTERVAL 3 DAY) DO

SET v_pt = date_format(v_maxdate+ INTERVAL 1 DAY ,'%Y%m%d');

SET v_maxval = date_format(v_maxdate + INTERVAL 1 DAY, '%Y-%m-%d');

SET @sql = concat('alter table test_log add partition (partition p', v_pt, ' values less than(''', v_maxval, '''))');

-- SELECT @sql;

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

SET v_maxdate = v_maxdate + INTERVAL 1 DAY;

END WHILE;

/*刪除舊分區,執行時,不要復制此行*/

SELECT min(cast(replace(partition_description, '''', '') AS date)) AS val

INTO v_mindate

FROM INFORMATION_SCHEMA.PARTITIONS

WHERE TABLE_NAME = 'test_log ' AND TABLE_SCHEMA = 'test';

WHILE v_mindate <= (v_sysdate - INTERVAL 6 DAY) DO

SET v_pt = date_format(v_mindate - INTERVAL 1 DAY,'%Y%m%d');

SET @sql = concat('alter table test_log drop partition p', v_pt);

-- SELECT @sql;

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

SET v_mindate = v_mindate + INTERVAL 1 DAY;

END WHILE;

END$$

delimiter ;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

手動調用存儲程序命令

每次新增分區和刪除舊分區需要手動執行以下命令執行,一般一天執行一次,或都一小時都可以,但是我們人不能每天上班都去執行一次,接下來我們會使用事件,讓mysql自動每天執行。

call proc_test_log;

1

開啟事件

使用mysql的事件實現定時分區,mysql默認是不會開啟事件例程的,需要手動打開,查看是否打開。

新建event事件

為了測試方便,間隔設置為分鐘, 也可設置成小時 24 hour

DELIMITER $$

drop event if exists auto_pt $$

create event auto_pt

on schedule

every 1 minute

starts '2019-10-01 13:19:02'

do

BEGIN

call proc_test_log();

END$$

delimiter ;

總結

以上是生活随笔為你收集整理的mysql按天执行分区表sql_Mysql按天自动表分区教程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久久九九国产精品 | 四虎在线免费播放 | 成人美女免费网站视频 | √8天堂资源地址中文在线 欧美精品在线一区二区 | 在线视频 一区二区 | 精品一区二区三区四区五区 | 男女操操操 | 男女啪啪在线观看 | 91精品国产综合久久久久久久 | 日韩成人在线播放 | 亚洲高清一区二区三区 | 日韩视频中文 | 黄色小视频在线免费观看 | 激情av | 国产又粗又猛又黄又爽视频 | 日韩天堂在线观看 | 爱爱网站视频 | 日本人妻不卡一区二区三区中文字幕 | 男生女生搞黄色 | 亚洲国产日韩一区无码精品久久久 | 久久久久久久久综合 | av生活片| 亚洲综合色成人 | 亚洲天堂激情 | 欧美在线观看视频一区二区 | 亚洲资源网站 | 蜜桃综合网 | 在线观看黄网站 | 777精品久无码人妻蜜桃 | 国产18禁黄网站免费观看 | 粉嫩av在线| 久久久久久久久久久99 | 久久福利小视频 | 香蕉久久夜色精品国产使用方法 | 久久免费视频观看 | 嫩草嫩草嫩草 | 色综合色综合色综合 | 69**夜色精品国产69乱 | 我要看免费的毛片 | 麻豆av一区二区三区在线观看 | 亚洲熟妇国产熟妇肥婆 | 又大又粗又爽18禁免费看 | 无码aⅴ精品一区二区三区 精品久久在线 | 人妻无码久久精品人妻 | 中文字幕乱码人妻无码久久95 | 亚洲人女屁股眼交6 | 国产精品第一页在线观看 | 欧美一级二级视频 | 91成人精品国产刺激国语对白 | 五月婷婷激情综合网 | 丁香视频在线观看 | jizz高潮 | 超碰.com| 国产精品秘 | 四虎影视成人 | 午夜香蕉 | 亚洲高清成人 | 欧美日韩一区二区三区在线 | 一级片网址 | 日韩精品在线观看AV | 婷婷天堂网 | 免费人成网站 | japanesehdxxxx | 国产精品一区二区白浆 | 丝袜 亚洲 另类 国产 制服 | 精品国产大片大片大片 | 欧美高清性 | 午夜影院欧美 | 夜色视频网 | 男女偷爱性视频刺激 | 亚洲 欧美 中文字幕 | 特黄aaaaaaaaa毛片免 | 国产免费久久精品国产传媒 | 欧美在线色 | 琪琪伦伦影院理论片 | 中文字幕免| 男男做爰猛烈叫床爽爽小说 | 狠狠爱夜夜爱 | 直接看av的网站 | 比利时xxxx性hd极品 | 国产一区欧美日韩 | 日韩精品免费一区二区夜夜嗨 | 中文在线字幕免费观看 | 一区二区三区激情 | 国产一区二区视频在线播放 | 91影音 | 亚洲人高潮女人毛茸茸 | 亚洲国产精品一区二区久久hs | 四虎最新网址在线观看 | 超碰在线cao | 日韩aⅴ在线观看 | 拍摄av现场失控高潮数次 | 成年人黄色一级片 | 粉豆av | 男女日批网站 | 日韩亚洲欧美一区二区三区 | 欧美变态口味重另类在线视频 | 天堂影院一区二区 | 激情综合av|