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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

数据切分——Mysql分区表的管理与维护

發(fā)布時(shí)間:2025/4/14 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据切分——Mysql分区表的管理与维护 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ? 關(guān)于Mysql分區(qū)表的介紹可以參考:

????????http://blog.csdn.net/jhq0113/article/details/44592865

?????? 關(guān)于Mysql分區(qū)表的創(chuàng)建可以參考:

???????http://blog.csdn.net/jhq0113/article/details/44593511


?????? 前面已經(jīng)提過,Mysql支持4種表的分區(qū),即RANGE與LIST、HASH與KEY,其中RANGE和LIST類似,按一種區(qū)間進(jìn)行分區(qū),HASH與KEY類似,是按照某種算法對(duì)字段進(jìn)行分區(qū)。


?????? RANGE與LIST分區(qū)管理:

?????? 案例:有一個(gè)聊天記錄表,用戶幾千左右,已經(jīng)對(duì)表按照用戶進(jìn)行一定粒度的水平分割,現(xiàn)仍然有部分表存儲(chǔ)的記錄比較多,于是按照下列方式有對(duì)表進(jìn)行了分區(qū),分區(qū)的好處是,可以動(dòng)態(tài)改變分區(qū),刪除分區(qū)后,數(shù)據(jù)也一同被刪除,如聊天記錄只保存兩年,那么你就可以按照時(shí)間進(jìn)行分區(qū),定期刪除兩年前的分區(qū),動(dòng)態(tài)創(chuàng)建新的的分區(qū)就能做到很好的數(shù)據(jù)維護(hù)。

???

?????? 分區(qū)表創(chuàng)建的語句如下:

????????

[sql]?view plain?copy ?print?
  • DROP?TABLE?IF?EXISTS?`msgss`;??
  • CREATE?TABLE?`msgss`?(??
  • ??`id`?bigint(20)?unsigned?NOT?NULL?AUTO_INCREMENT?COMMENT?'表主鍵',??
  • ??`sender`?int(10)?unsigned?NOT?NULL?COMMENT?'發(fā)送者ID',??
  • ??`reciver`?int(10)?unsigned?NOT?NULL?COMMENT?'接收者ID',??
  • ??`msg_type`?tinyint(3)?unsigned?NOT?NULL?COMMENT?'消息類型',??
  • ??`msg`?varchar(225)?NOT?NULL?COMMENT?'消息內(nèi)容',??
  • ??`atime`?int(10)?unsigned?NOT?NULL?COMMENT?'發(fā)送時(shí)間',??
  • ??`sub_id`?tinyint(3)?unsigned?NOT?NULL?COMMENT?'部門ID',??
  • ??PRIMARY?KEY?(`id`,`atime`,`sub_id`)??
  • )?ENGINE=InnoDB?DEFAULT?CHARSET=utf8??
  • /*********分區(qū)信息**************/??
  • PARTITION?BY?RANGE?(atime)?SUBPARTITION?BY?HASH?(sub_id)???
  • (??
  • ????????PARTITION?t0?VALUES?LESS?THAN(1451577600)??
  • ????????(??
  • ????????????SUBPARTITION?s0,??
  • ????????????SUBPARTITION?s1,??
  • ????????????SUBPARTITION?s2,??
  • ????????????SUBPARTITION?s3,??
  • ????????????SUBPARTITION?s4,??
  • ????????????SUBPARTITION?s5??
  • ????????),??
  • ????????PARTITION?t1?VALUES?LESS?THAN(1483200000)??
  • ????????(??
  • ????????????SUBPARTITION?s6,??
  • ????????????SUBPARTITION?s7,??
  • ????????????SUBPARTITION?s8,??
  • ????????????SUBPARTITION?s9,??
  • ????????????SUBPARTITION?s10,??
  • ????????????SUBPARTITION?s11??
  • ????????),??
  • ????????PARTITION?t2?VALUES?LESS?THAN?MAXVALUE??
  • ????????(??
  • ????????????SUBPARTITION?s12,??
  • ????????????SUBPARTITION?s13,??
  • ????????????SUBPARTITION?s14,??
  • ????????????SUBPARTITION?s15,??
  • ????????????SUBPARTITION?s16,??
  • ????????????SUBPARTITION?s17??
  • ????????)??
  • );??


  • ??????? 上述語句創(chuàng)建了三個(gè)按照RANGE劃分的主分區(qū),每個(gè)主分區(qū)下面有六個(gè)按照HASH劃分的子分區(qū)。


    ??????? 插入測(cè)試數(shù)據(jù):

    ???????

    [sql]?view plain?copy ?print?
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH',UNIX_TIMESTAMP(NOW()),1);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?2',UNIX_TIMESTAMP(NOW()),2);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?3',UNIX_TIMESTAMP(NOW()),3);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?10',UNIX_TIMESTAMP(NOW()),10);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?7',UNIX_TIMESTAMP(NOW()),7);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?5',UNIX_TIMESTAMP(NOW()),5);??
  • ??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH',1451577607,1);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?2',1451577609,2);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?3',1451577623,3);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?10',1451577654,10);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?7',1451577687,7);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?5',1451577699,5);??
  • ??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH',1514736056,1);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?2',1514736066,2);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?3',1514736076,3);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?10',1514736086,10);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?7',1514736089,7);??
  • INSERT?INTO?`msgss`(`sender`,`reciver`,`msg_type`,`msg`,`atime`,`sub_id`)?VALUES(1,2,0,'Hello?HASH?5',1514736098,5);??

  • ?????? ? ? ? ? ???進(jìn)行分區(qū)分析:

    ??????? EXPLAIN PARTITIONS SELECT * FROM msgss;

    ??????? 可以檢測(cè)到分區(qū)信息如下:

    ??????????


    ???????? 檢測(cè)分區(qū)數(shù)據(jù)分布:

    ?????????

    [sql]?view plain?copy ?print?
  • EXPLAIN?PARTITIONS?SELECT?*?FROM?msgss?WHERE?`atime`<1451577600;??
  • ??
  • EXPLAIN?PARTITIONS?SELECT?*?FROM?msgss?WHERE?`atime`>1451577600?AND?`atime`<1483200000;??
  • ??
  • EXPLAIN?PARTITIONS?SELECT?*?FROM?msgss?WHERE?`atime`>1483200000?AND?`atime`<1514736000;??
  • ??
  • EXPLAIN?PARTITIONS?SELECT?*?FROM?msgss?WHERE?`atime`>1514736000;??

  • ????????????????????結(jié)果:第一條語句只掃描了t0的所有子分區(qū),第二條語句只掃描了t1的所有子分區(qū),第三四條分別只掃描了t2的所有子分區(qū),證明表的分區(qū)和數(shù)據(jù)分布成功。


    ?????????需求:目前已經(jīng)是2017年,需要將2015年所有的聊天記錄刪除,但是保留2016年的聊天記錄,并且2017年的數(shù)據(jù)也能正常按照分區(qū)進(jìn)行存儲(chǔ)。


    ??????? 實(shí)現(xiàn)以上需求,需要兩步,第一步刪除t0分區(qū),第二步按照新規(guī)則重建分區(qū)。

    ??????? 刪除分區(qū)語句:

    ??????? ALTER TABLE `msgss` DROP PARTITION t0;

    ??????? 重建分區(qū)語句:

    ???????

    [sql]?view plain?copy ?print?
  • ALTER?TABLE?`msgss`?PARTITION?BY?RANGE?(atime)?SUBPARTITION?BY?HASH?(sub_id)???
  • (??
  • ????????PARTITION?t0?VALUES?LESS?THAN(1483200000)??
  • ????????(??
  • ????????????SUBPARTITION?s0,??
  • ????????????SUBPARTITION?s1,??
  • ????????????SUBPARTITION?s2,??
  • ????????????SUBPARTITION?s3,??
  • ????????????SUBPARTITION?s4,??
  • ????????????SUBPARTITION?s5??
  • ????????),??
  • ????????PARTITION?t1?VALUES?LESS?THAN(1514736000)??
  • ????????(??
  • ????????????SUBPARTITION?s6,??
  • ????????????SUBPARTITION?s7,??
  • ????????????SUBPARTITION?s8,??
  • ????????????SUBPARTITION?s9,??
  • ????????????SUBPARTITION?s10,??
  • ????????????SUBPARTITION?s11??
  • ????????),??
  • ????????PARTITION?t2?VALUES?LESS?THAN?MAXVALUE??
  • ????????(??
  • ????????????SUBPARTITION?s12,??
  • ????????????SUBPARTITION?s13,??
  • ????????????SUBPARTITION?s14,??
  • ????????????SUBPARTITION?s15,??
  • ????????????SUBPARTITION?s16,??
  • ????????????SUBPARTITION?s17??
  • ????????)??
  • );??

  • ????????????????????查詢發(fā)現(xiàn),15年的數(shù)據(jù)全部被刪除,剩余的數(shù)據(jù)被重新分區(qū)并分布。

    ???????? 未完。。。。

    轉(zhuǎn)載于:https://www.cnblogs.com/duyinqiang/p/5696360.html

    總結(jié)

    以上是生活随笔為你收集整理的数据切分——Mysql分区表的管理与维护的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。