mysql分區(qū)
Mysql支持水平分區(qū),并不支持垂直分區(qū);
水平分區(qū):指將同一表中不同行的記錄分配到不同的物理文件中使鹅;
垂直分區(qū):指將同一表中不同列的記錄分配到不同的物理文件中;
其中CSV昌抠、FEDORATED并徘、MERGE等引擎不支持分區(qū),MYISAM扰魂、InnoDB麦乞、NDB等引擎支持分區(qū)
目的
將一個表或索引分解為多個更小、更可管理的部分劝评,從邏輯上講姐直,只有一個表或者索引,但是物理上這個表或者索引可能由數(shù)十個物理分區(qū)組成蒋畜;每個分區(qū)都是獨(dú)立的對象声畏,可以獨(dú)自處理,也可以作為一個更大對象的一部分進(jìn)行處理(如果分區(qū)表很大,亦可以將分區(qū)分配到不同的磁盤上去)插龄;在執(zhí)行查詢的時候愿棋,優(yōu)化器會根據(jù)分區(qū)定義過濾哪些沒有我們需要數(shù)據(jù)的分區(qū),這樣查詢就無須全表掃描所有分區(qū)均牢,只查找包含需要數(shù)據(jù)的分區(qū)即可
適用場景
- 表非常大以至于無法全部都放到內(nèi)存糠雨,或者只在表的最后部分有熱點(diǎn)數(shù)據(jù),其他均為歷史數(shù)據(jù)
- 分區(qū)表數(shù)據(jù)更容易維護(hù)(可獨(dú)立對分區(qū)進(jìn)行優(yōu)化徘跪、檢查甘邀、修復(fù)及批量刪除大數(shù)據(jù)可以采用drop分區(qū)的形式等)
- 分區(qū)表的數(shù)據(jù)可以分布在不同的物理設(shè)備上,從而高效地利用多個硬件設(shè)備
- 分區(qū)表可以避免某些特殊的瓶頸(ps: InnoDB的單個索引的互斥訪問垮庐、ext3文件系統(tǒng)的inode鎖競爭等)
- 可以備份和恢復(fù)獨(dú)立的分區(qū)松邪,非常適用于大數(shù)據(jù)集的場景
分區(qū)表限制
- 單表最多支持1024個分區(qū)
- MySQL5.1只能對數(shù)據(jù)表的整型列進(jìn)行分區(qū),或者數(shù)據(jù)列可以通過分區(qū)函數(shù)轉(zhuǎn)化成整型列;
- MySQL5.5的RANGE LIST類型可以直接使用列進(jìn)行分區(qū)
- 如果分區(qū)字段中有主鍵或唯一索引的列哨查,那么所有的主鍵列和唯一索引列都必須包含進(jìn)來
- 分區(qū)表無法使用外鍵約束
- 分區(qū)必須使用相同的Engine
- 對于MyISAM分區(qū)表逗抑,不能在使用LOAD INDEX INTO CACHE操作
- 對于MyISAM分區(qū)表,使用時會打開更多的文件描述符(單個分區(qū)是一個獨(dú)立的文件)
分區(qū)策略
- 全量掃描數(shù)據(jù)寒亥,不需要任何索引:通過where條件大概定位哪個分區(qū)邮府,必須將查詢所需要掃描的分區(qū)個數(shù)限制在很小的數(shù)量
- 建立分區(qū)索引,分離熱點(diǎn):如將明顯的熱點(diǎn)數(shù)據(jù)分離到一個分區(qū)护盈,使其盡量緩存到內(nèi)存中挟纱,這樣就能充分使用索引和緩存
- 注意:以上策略均以查詢得到過濾羞酗,丟掉額外的分區(qū)腐宋,分區(qū)本身不產(chǎn)生額外的代價為準(zhǔn)則】
分區(qū)表使用過程的坑
- NULL值會使分區(qū)過濾無效:
分表的表達(dá)式的值可以是NULL,第一個分區(qū)為特殊分區(qū)存放NULL或者非法值
如: PARTITION BY RANGE YEAR(order_date)進(jìn)行分區(qū)檀轨,那么order_date為NULL或者非法值胸竞,記錄存放在第一個分區(qū):
WHERE order_date BETWEEN ‘2014-01-01’ AND ‘2014-01-31’查詢時會檢查兩個分區(qū):
第一個分區(qū)及1月份分區(qū),避免第一分區(qū)數(shù)據(jù)過大時造成查詢代價過高参萄,可以使用:建立第一分區(qū)專門存放order_date為NULL和非法值記錄 PARTITION p_nulls VALUES LESS THAN(0)
MySQL5.5以后可以才用一下語法解決問題: PARTITION BY RANGE COLUMNS(order_date)
- 分區(qū)列和索引列不匹配
此種情況下查詢無法進(jìn)行分區(qū)過濾卫枝,分區(qū)失效除非查詢中包含了可以過濾分區(qū)的條件
RANGE類型分區(qū)隨著分區(qū)數(shù)量增加會對MYSQL額外增加查詢分區(qū)定義列表(符合條件行在哪個分區(qū))的壓力,盡量限制適當(dāng)?shù)姆謪^(qū)數(shù)量;key和hash類型分區(qū)不存在此問題
重組分區(qū)或者類似alter語句可能會造成很大的開銷
新建或者刪除分區(qū)操作很快讹挎,重組分區(qū)或者類似ALTER語句操作會先創(chuàng)建一個臨時的分區(qū)校赤,將數(shù)據(jù)復(fù)制其中,然后在刪除原分區(qū)
分區(qū)表類型
- RANGE分區(qū):行數(shù)據(jù)基于屬于一個給定連續(xù)區(qū)間的列值被放入分區(qū)
MySQL5.5開始支持RANGE COLUMNS的分區(qū)(引入Columns分區(qū)解決了MySQL 5.5版本之前RANGE分區(qū)和LIST分區(qū)只支持整數(shù)分區(qū)筒溃,從而導(dǎo)致需要額外的函數(shù)計算得到整數(shù)或者通過額外的轉(zhuǎn)換表來轉(zhuǎn)換為整數(shù)再分區(qū)的問題马篮。Columns分區(qū)可以細(xì)分為RANGE Columns分區(qū)和LIST Columns分區(qū),RANGE Columns分區(qū)和LIST Columns分區(qū)都支持整數(shù)怜奖、日期時間浑测、字符串三大數(shù)據(jù)類型)
LIST分區(qū):類似于按RANGE分區(qū),區(qū)別在于LIST分區(qū)是基于列值匹配一個離散值集合中的某個值來進(jìn)行選擇歪玲。
MySQL5.5開始支持RANGE COLUMNS的分區(qū)COLUMNS分區(qū):可以無需通過表達(dá)式進(jìn)行轉(zhuǎn)換直接對非整形字段進(jìn)行分區(qū)迁央,同時COLUMNS分區(qū)還支持多個字段組合分區(qū)掷匠,只有RANGELIST存在COLUMNS分區(qū),COLUMNS是RANGE和LIST分區(qū)的升級岖圈。
HASH分區(qū):基于給定的分區(qū)個數(shù)讹语,將數(shù)據(jù)分配到不同的分區(qū),HASH分區(qū)只能針對整數(shù)進(jìn)行HASH幅狮,對于非整形的字段只能通過表達(dá)式將其轉(zhuǎn)換成整數(shù)募强。
KEY分區(qū):根據(jù)MySQLS數(shù)據(jù)庫提供的哈希函數(shù)來進(jìn)行分區(qū) 【注:無論創(chuàng)建何種類型的分區(qū),如果表中存在主鍵或唯一索引時崇摄,分區(qū)列必須是唯一索引的一個組成部分】支持除text和BLOB之外的所有數(shù)據(jù)類型的分區(qū),key分區(qū)可以直接基于字段做分區(qū)無需轉(zhuǎn)換成整數(shù)擎值。
說明
注意分區(qū)名的大小寫敏感問題,和關(guān)鍵字問題逐抑。
無論哪種分區(qū)類型鸠儿,要么分區(qū)表中沒有主鍵或唯一鍵,要么主鍵或唯一鍵包含在分區(qū)列里面厕氨,對于存在主鍵或者唯一鍵的表不能使用主鍵或者唯一鍵之外的字段作為分區(qū)字段进每。
5.7以前的版本顯示分區(qū)的執(zhí)行計劃使用:explain PARTITIONS;5.7以后直接執(zhí)行:explain
沒有強(qiáng)制要求分區(qū)列非空命斧,建議分區(qū)的列為NOT NULL的列田晚;在RANGE 分區(qū)中如果往分區(qū)列中插入NULL值會被當(dāng)作最小的值來處理,在LIST分區(qū)中NULL值必須在枚舉列表中否則插入失敗国葬,在HASH/KEY分區(qū)中NULL值會被當(dāng)作0來處理贤徒。
基于時間類型的字段的轉(zhuǎn)換函數(shù)mysql提供了"YEAR(),MONTH(),DAY(),TO_DAYS(),TO_SECONDS(),WEEKDAY(),DAYOFYEAR()"
拆分合并分區(qū)后會導(dǎo)致修改的分區(qū)的統(tǒng)計信息失效,沒有修改的分區(qū)的統(tǒng)計信息還在,不影響新插入的值加入到統(tǒng)計信息;這時需要對表執(zhí)行Analyze操作.
針對非整形字段進(jìn)行RANG\LIST分區(qū)建議使用COLUMNS分區(qū)汇四。
分區(qū)表相關(guān)操作
分區(qū)相關(guān)查詢
查看當(dāng)前數(shù)據(jù)庫是否支持分區(qū)
mysql> show variables like '%partition%';
+---------------------------------------+-------+
| Variable_name | Value |
+---------------------------------------+-------+
| have_partitioning | YES |
| innodb_adaptive_hash_index_partitions | 1 |
+---------------------------------------+-------+
2 rows in set
查看創(chuàng)建分區(qū)表的CREATE語句
mysql>show create table operation_log;
查看表是否為分區(qū)表(Create_options)
mysql>show table status(當(dāng)前庫所有表狀態(tài))
mysql>show table status from lockrank like '%operation_log%';(lockrank庫operation_log表狀態(tài))
Table: operation_log
Create Table: CREATE TABLE `operation_log` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`cid` mediumint(7) unsigned NOT NULL,
`accountid` mediumint(8) NOT NULL DEFAULT '0' ,
`flag` tinyint(1) unsigned NOT NULL DEFAULT '0',
`addtime` int(11) unsigned NOT NULL,
`device` tinyint(1) unsigned NOT NULL DEFAULT '1' ,
PRIMARY KEY (`id`,`addtime`),
KEY `idx_accountid_addtime` (`accountid`,`addtime`),
KEY `idx_accountid_flag` (`accountid`,`flag`),
) ENGINE=InnoDB AUTO_INCREMENT=50951039 DEFAULT CHARSET=utf8 COMMENT='操作記錄'
/*!50100 PARTITION BY RANGE (addtime)
(PARTITION `2013-05` VALUES LESS THAN (1370016000) ENGINE = InnoDB,
PARTITION `2013-06` VALUES LESS THAN (1372608000) ENGINE = InnoDB,
PARTITION `2013-07` VALUES LESS THAN (1375286400) ENGINE = InnoDB,
PARTITION `2013-08` VALUES LESS THAN (1377964800) ENGINE = InnoDB,
PARTITION `2013-09` VALUES LESS THAN (1380556800) ENGINE = InnoDB,
PARTITION `2013-10` VALUES LESS THAN (1383235200) ENGINE = InnoDB,
PARTITION `2013-11` VALUES LESS THAN (1385827200) ENGINE = InnoDB,
PARTITION `2013-12` VALUES LESS THAN (1388505600) ENGINE = InnoDB,
PARTITION `2014-01` VALUES LESS THAN (1391184000) ENGINE = InnoDB,
PARTITION `2014-02` VALUES LESS THAN (1393603200) ENGINE = InnoDB,
PARTITION `2014-03` VALUES LESS THAN (1396281600) ENGINE = InnoDB,
PARTITION `2014-04` VALUES LESS THAN (1398873600) ENGINE = InnoDB,
PARTITION `2014-05` VALUES LESS THAN (1401552000) ENGINE = InnoDB,
PARTITION `2014-06` VALUES LESS THAN (1404144000) ENGINE = InnoDB,
PARTITION `2014-07` VALUES LESS THAN (1406822400) ENGINE = InnoDB,
PARTITION `2014-08` VALUES LESS THAN (1409500800) ENGINE = InnoDB,
PARTITION `2014-09` VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
1 row in set (0.00 sec)
查看select如何使用分區(qū)
mysql> explain partitions select id,accountid,cid,flag from operation_log where addtime="1369362524" \G ;
*************************** 1\. row ***************************
id: 1
select_type: SIMPLE
table: operation_log
partitions: 2013-05
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4384356
Extra: Using where
1 row in set (0.00 sec)
分區(qū)表元數(shù)據(jù)統(tǒng)計表:INFORMATION_SCHEMA.PARTITIONS
查看分區(qū)表operation_log的分區(qū)信息
mysql> SELECT partition_name part, partition_expression expr, partition_description descr, table_rows FROM INFORMATION_SCHEMA.partitions WHERE TABLE_SCHEMA = schema() AND TABLE_NAME='operation_log';
+---------+---------+------------+------------+
| part| expr| descr | table_rows |
+---------+---------+------------+------------+
| 2013-05 | addtime | 1370016000 | 5999642 |
| 2013-06 | addtime | 1372608000 | 4579263 |
| 2013-07 | addtime | 1375286400 | 3223772 |
| 2013-08 | addtime | 1377964800 | 1995058 |
| 2013-09 | addtime | 1380556800 | 2497406 |
| 2013-10 | addtime | 1383235200 | 4106974 |
| 2013-11 | addtime | 1385827200 | 6209559 |
| 2013-12 | addtime | 1388505600 | 6415349 |
| 2014-01 | addtime | 1391184000 | 3953594 |
| 2014-02 | addtime | 1393603200 | 0 |
| 2014-03 | addtime | 1396281600 | 0 |
| 2014-04 | addtime | 1398873600 | 0 |
| 2014-05 | addtime | 1401552000 | 0 |
| 2014-06 | addtime | 1404144000 | 0 |
| 2014-07 | addtime | 1406822400 | 0 |
| 2014-08 | addtime | 1409500800 | 0 |
| 2014-09 | addtime | MAXVALUE | 0 |
+---------+---------+------------+------------+
17 rows in set (1.48 sec)
創(chuàng)建分區(qū)操作
- RANGE分區(qū):
mysql> CREATE TABLE `operation_log` (
-> `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
-> `cid` mediumint(7) unsigned NOT NULL,
-> `accountid` mediumint(8) NOT NULL DEFAULT '0' ,
-> `flag` tinyint(1) unsigned NOT NULL DEFAULT '0',
-> `addtime` int(11) unsigned NOT NULL,
-> `device` tinyint(1) unsigned NOT NULL DEFAULT '1' ,
-> PRIMARY KEY (`id`,`addtime`),
-> KEY `idx_accountid_addtime` (`accountid`,`addtime`),
-> KEY `idx_accountid_flag` (`accountid`,`flag`),
->) ENGINE=InnoDB AUTO_INCREMENT=50951039 DEFAULT CHARSET=utf8 COMMENT='操作記錄'
->/*!50100 PARTITION BY RANGE (addtime)
->(PARTITION `2013-05` VALUES LESS THAN (1370016000) ENGINE = InnoDB,
-> PARTITION `2013-06` VALUES LESS THAN (1372608000) ENGINE = InnoDB,
-> PARTITION `2013-07` VALUES LESS THAN (1375286400) ENGINE = InnoDB,
-> PARTITION `2013-08` VALUES LESS THAN (1377964800) ENGINE = InnoDB,
-> PARTITION `2013-09` VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */接奈;
1 row in set (0.00 sec)
( LESS THAN MAXVALUE考慮到可能的最大值)
-
list分區(qū)
//這種方式失敗mysql> CREATE TABLE IF NOT EXISTS `list_part` ( -> `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用戶ID', -> `province_id` int(2) NOT NULL DEFAULT 0 COMMENT '省', -> `name` varchar(50) NOT NULL DEFAULT '' COMMENT '名稱', -> `sex` int(1) NOT NULL DEFAULT '0' COMMENT '0為男,1為女', -> PRIMARY KEY (`id`) -> ) ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 -> PARTITION BY LIST (province_id) ( -> PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8), -> PARTITION p1 VALUES IN (9,10,11,12,16,21), -> PARTITION p2 VALUES IN (13,14,15,19), -> PARTITION p3 VALUES IN (17,18,20,22,23,24) -> ); ERROR 1503 (HY000): A PRIMARY KEY must include all columns in the table's partitioning function //這種方式成功 mysql> CREATE TABLE IF NOT EXISTS `list_part` ( -> `id` int(11) NOT NULL COMMENT '用戶ID', -> `province_id` int(2) NOT NULL DEFAULT 0 COMMENT '省', -> `name` varchar(50) NOT NULL DEFAULT '' COMMENT '名稱', -> `sex` int(1) NOT NULL DEFAULT '0' COMMENT '0為男通孽,1為女' -> ) ENGINE=INNODB DEFAULT CHARSET=utf8 -> PARTITION BY LIST (province_id) ( -> PARTITION p0 VALUES IN (1,2,3,4,5,6,7,8), -> PARTITION p1 VALUES IN (9,10,11,12,16,21), -> PARTITION p2 VALUES IN (13,14,15,19), -> PARTITION p3 VALUES IN (17,18,20,22,23,24) -> ); Query OK, 0 rows affected (0.33 sec) 上面的這個創(chuàng)建list分區(qū)時序宦,如果有主銉的話,分區(qū)時主鍵必須在其中背苦,不然就會報錯互捌。如果我不用主鍵,分區(qū)就創(chuàng)建成功了行剂,一般情況下秕噪,一個張表肯定會有一個主鍵,這算是一個分區(qū)的局限性
* hash分區(qū)
mysql> CREATE TABLE IF NOT EXISTS hash_part
(
-> id
int(11) NOT NULL AUTO_INCREMENT COMMENT '評論ID',
-> comment
varchar(1000) NOT NULL DEFAULT '' COMMENT '評論',
-> ip
varchar(25) NOT NULL DEFAULT '' COMMENT '來源IP',
-> PRIMARY KEY (id
)
-> ) ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1
-> PARTITION BY HASH(id)
-> PARTITIONS 3;
Query OK, 0 rows affected (0.06 sec)
* key分區(qū)
mysql> CREATE TABLE IF NOT EXISTS key_part
(
-> news_id
int(11) NOT NULL COMMENT '新聞ID',
-> content
varchar(1000) NOT NULL DEFAULT '' COMMENT '新聞內(nèi)容',
-> u_id
varchar(25) NOT NULL DEFAULT '' COMMENT '來源IP',
-> create_time
DATE NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '時間'
-> ) ENGINE=INNODB DEFAULT CHARSET=utf8
-> PARTITION BY LINEAR HASH(YEAR(create_time))
-> PARTITIONS 3;
Query OK, 0 rows affected (0.07 sec)
#### 增加子分區(qū)操作
>子分區(qū)是分區(qū)表中每個分區(qū)的再次分割硼讽,子分區(qū)既可以使用HASH希分區(qū)巢价,也可以使用KEY分區(qū)。這 也被稱為復(fù)合分區(qū)(composite partitioning)
1. 如果一個分區(qū)中創(chuàng)建了子分區(qū),其他分區(qū)也要有子分區(qū)
2. 如果創(chuàng)建了了分區(qū)壤躲,每個分區(qū)中的子分區(qū)數(shù)必須相同
3. 同一分區(qū)內(nèi)的子分區(qū)城菊,名字不相同,不同分區(qū)內(nèi)的子分區(qū)名子可以相同(5.1.50不適用)
mysql> CREATE TABLE IF NOT EXISTS sub_part
(
-> news_id
int(11) NOT NULL COMMENT '新聞ID',
-> content
varchar(1000) NOT NULL DEFAULT '' COMMENT '新聞內(nèi)容',
-> u_id
int(11) NOT NULL DEFAULT 0s COMMENT '來源IP',
-> create_time
DATE NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '時間'
-> ) ENGINE=INNODB DEFAULT CHARSET=utf8
-> PARTITION BY RANGE(YEAR(create_time))
-> SUBPARTITION BY HASH(TO_DAYS(create_time))(
-> PARTITION p0 VALUES LESS THAN (1990)(SUBPARTITION s0,SUBPARTITION s1,SUBPARTITION s2),
-> PARTITION p1 VALUES LESS THAN (2000)(SUBPARTITION s3,SUBPARTITION s4,SUBPARTITION good),
-> PARTITION p2 VALUES LESS THAN MAXVALUE(SUBPARTITION tank0,SUBPARTITION tank1,SUBPARTITION tank3)
-> );
Query OK, 0 rows affected (0.07 sec)
### 分區(qū)管理
#### 增加分區(qū)操作(針對設(shè)置MAXVALUE)
##### range添加分區(qū)
mysql>alter table operation_log add partition(partition 2013-10
values less than (1383235200));
--->適用于沒有設(shè)置MAXVALUE的分區(qū)添加
ERROR 1481 (HY000):MAXVALUE can only be used in last partition definition
mysql>alter table operation_log REORGANIZE partition 2013-09
into (partition 2013-09
values less than (1380556800),partition 2013-10
values less than (1383235200),partition 2013-11
values less than maxvalue);
##### list添加分區(qū)
mysql> alter table list_part add partition(partition p4 values in (25,26,28));
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
##### hash重新分區(qū)
mysql> alter table list_part add partition(partition p4 values in (25,26,28));
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
##### key重新分區(qū)
mysql> alter table key_part add partition partitions 4;
Query OK, 1 row affected (0.06 sec)//有數(shù)據(jù)也會被重新分配
Records: 1 Duplicates: 0 Warnings: 0
##### 子分區(qū)添加新分區(qū)碉克,雖然我沒有指定子分區(qū)凌唬,但是系統(tǒng)會給子分區(qū)命名的
mysql> alter table sub1_part add partition(partition p3 values less than MAXVALUE);
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
1.移除表的分區(qū)
ALTER TABLE tablename
REMOVE PARTITIONING ;
注意:使用remove移除分區(qū)是僅僅移除分區(qū)的定義,并不會刪除數(shù)據(jù)和drop PARTITION不一樣漏麦,后者會連同數(shù)據(jù)一起刪除
2.對已經(jīng)存在記錄的表創(chuàng)建分區(qū)客税,以增加range分區(qū)為例,和創(chuàng)建表建分區(qū)的語法一樣撕贞。
ALTER TABLE tb_partition
.tb_varchar
PARTITION BY RANGE(id) PARTITIONS 3( PARTITION part0 VALUES LESS THAN (5000), PARTITION part1 VALUES LESS THAN (10000), PARTITION part2 VALUES LESS THAN (MAXVALUE)) ;
注意:對已有的表創(chuàng)建分區(qū)之后更耻,數(shù)據(jù)會按照分區(qū)的定義分布到各個分區(qū)文件當(dāng)中
##### 刪除分區(qū)操作
alter table user drop partition2013-05;
#### 分區(qū)表其他操作
* 重建分區(qū)(官方:與先drop所有記錄然后reinsert是一樣的效果;用于整理表碎片)
`alter table operation_log rebuild partition `2014-01`;`
* 重建多個分區(qū)
alter table operation_log rebuild partition 2014-01
,2014-02
;
過程如下:
pro
優(yōu)化分區(qū)(如果刪除了一個分區(qū)的大量記錄或者對一個分區(qū)的varchar blob text數(shù)據(jù)類型的字段做了許多更新捏膨,此時可以對分區(qū)進(jìn)行優(yōu)化以回收未使用的空間和整理分區(qū)數(shù)據(jù)文件)
alter table operation_log optimize partition 2014-01
;
優(yōu)化的操作相當(dāng)于check partition,analyze partition 和repair patition
分析分區(qū)
alter table operation_log analyze partition 2014-01
;
修復(fù)分區(qū)
alter table operation_log repair partition 2014-01
;
檢查分區(qū)
alter table operation_log check partition 2014-01
;
注釋:
mysqlcheck秧均、myisamchk并不支持分區(qū)表,analyze,check,optimize,rebuild,repair,truncate不支持子分區(qū)操作
在MySQL5.6中号涯,可以使用清空一個分區(qū)數(shù)據(jù):alter table operation_log truncate partition 2014-01;
清空該分區(qū)表所有分區(qū)數(shù)據(jù):alter table operation_log truncate partition all;
更多詳細(xì)可閱讀 https://www.cnblogs.com/chenmh/p/5623474.html