《MySQL——分区表小记》
分區(qū)表的組織形式
以年份為分割方式,對(duì)表進(jìn)行分割:
CREATE TABLE `t` (`ftime` datetime NOT NULL,`c` int(11) DEFAULT NULL,KEY (`ftime`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PARTITION BY RANGE (YEAR(ftime)) (PARTITION p_2017 VALUES LESS THAN (2017) ENGINE = InnoDB,PARTITION p_2018 VALUES LESS THAN (2018) ENGINE = InnoDB,PARTITION p_2019 VALUES LESS THAN (2019) ENGINE = InnoDB, PARTITION p_others VALUES LESS THAN MAXVALUE ENGINE = InnoDB);[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-eXl2g6NP-1617946354787)(C:\Users\LENOVO\AppData\Roaming\Typora\typora-user-images\1617944262057.png)]
現(xiàn)在插入兩行記錄:
insert into t values('2017-4-1',1),('2018-4-1',1);這兩行記錄分別被放置在p_2018和p_2019分區(qū)上。
對(duì)于引擎層,這是四個(gè)表;對(duì)于server層,這是一個(gè)表
需要注意以下幾點(diǎn):
1、MySQL在第一次打開分區(qū)表時(shí),需要訪問所有的分區(qū)
2、sever層,認(rèn)為是同一張表,因此所有分區(qū)共用同一個(gè)MDL鎖
3、引擎層,認(rèn)為是不同的表,因此MDL鎖之后的執(zhí)行過程,會(huì)根據(jù)分區(qū)表規(guī)則,只訪問必要的分區(qū)
分區(qū)表應(yīng)用場(chǎng)景
分區(qū)表優(yōu)勢(shì):對(duì)業(yè)務(wù)透明,相對(duì)于用戶分表來說,使用分區(qū)表的業(yè)務(wù)代碼更簡(jiǎn)潔。
如果有一個(gè)長(zhǎng)時(shí)間業(yè)務(wù),有一個(gè)根據(jù)時(shí)間刪除歷史數(shù)據(jù)的需求。此時(shí),按照時(shí)間分區(qū)的分區(qū)表,就可以直接通過alter table t drop partition 語句刪掉分區(qū),從而刪掉過期的歷史數(shù)據(jù)。
分區(qū)表使用注意點(diǎn)
1、分區(qū)并不是越細(xì)越好。
2、分區(qū)不要提前預(yù)留太多,在使用之前預(yù)先創(chuàng)建即可。對(duì)于沒有數(shù)據(jù)的歷史分區(qū)要及時(shí)drop
3、查詢需要跨多個(gè)分區(qū)取數(shù)據(jù),查詢性能下降。
總結(jié)
以上是生活随笔為你收集整理的《MySQL——分区表小记》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《原神》秘仪圣殿宝箱打开方法
- 下一篇: 《MySQL 8.0.22执行器源码分析