mysql分區(qū)

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ū)即可

適用場景

  1. 表非常大以至于無法全部都放到內(nèi)存糠雨,或者只在表的最后部分有熱點(diǎn)數(shù)據(jù),其他均為歷史數(shù)據(jù)
  2. 分區(qū)表數(shù)據(jù)更容易維護(hù)(可獨(dú)立對分區(qū)進(jìn)行優(yōu)化徘跪、檢查甘邀、修復(fù)及批量刪除大數(shù)據(jù)可以采用drop分區(qū)的形式等)
  3. 分區(qū)表的數(shù)據(jù)可以分布在不同的物理設(shè)備上,從而高效地利用多個硬件設(shè)備
  4. 分區(qū)表可以避免某些特殊的瓶頸(ps: InnoDB的單個索引的互斥訪問垮庐、ext3文件系統(tǒng)的inode鎖競爭等)
  5. 可以備份和恢復(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ū)表類型

  1. 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ù)類型)

  1. LIST分區(qū):類似于按RANGE分區(qū),區(qū)別在于LIST分區(qū)是基于列值匹配一個離散值集合中的某個值來進(jìn)行選擇歪玲。
    MySQL5.5開始支持RANGE COLUMNS的分區(qū)

  2. COLUMNS分區(qū):可以無需通過表達(dá)式進(jìn)行轉(zhuǎn)換直接對非整形字段進(jìn)行分區(qū)迁央,同時COLUMNS分區(qū)還支持多個字段組合分區(qū)掷匠,只有RANGELIST存在COLUMNS分區(qū),COLUMNS是RANGE和LIST分區(qū)的升級岖圈。

  3. HASH分區(qū):基于給定的分區(qū)個數(shù)讹语,將數(shù)據(jù)分配到不同的分區(qū),HASH分區(qū)只能針對整數(shù)進(jìn)行HASH幅狮,對于非整形的字段只能通過表達(dá)式將其轉(zhuǎn)換成整數(shù)募强。

  4. 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ù)擎值。

說明

  1. 注意分區(qū)名的大小寫敏感問題,和關(guān)鍵字問題逐抑。

  2. 無論哪種分區(qū)類型鸠儿,要么分區(qū)表中沒有主鍵或唯一鍵,要么主鍵或唯一鍵包含在分區(qū)列里面厕氨,對于存在主鍵或者唯一鍵的表不能使用主鍵或者唯一鍵之外的字段作為分區(qū)字段进每。

  3. 5.7以前的版本顯示分區(qū)的執(zhí)行計劃使用:explain PARTITIONS;5.7以后直接執(zhí)行:explain

  4. 沒有強(qiáng)制要求分區(qū)列非空命斧,建議分區(qū)的列為NOT NULL的列田晚;在RANGE 分區(qū)中如果往分區(qū)列中插入NULL值會被當(dāng)作最小的值來處理,在LIST分區(qū)中NULL值必須在枚舉列表中否則插入失敗国葬,在HASH/KEY分區(qū)中NULL值會被當(dāng)作0來處理贤徒。

  5. 基于時間類型的字段的轉(zhuǎn)換函數(shù)mysql提供了"YEAR(),MONTH(),DAY(),TO_DAYS(),TO_SECONDS(),WEEKDAY(),DAYOFYEAR()"

  6. 拆分合并分區(qū)后會導(dǎo)致修改的分區(qū)的統(tǒng)計信息失效,沒有修改的分區(qū)的統(tǒng)計信息還在,不影響新插入的值加入到統(tǒng)計信息;這時需要對表執(zhí)行Analyze操作.

  7. 針對非整形字段進(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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末目胡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子链快,更是在濱河造成了極大的恐慌誉己,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件域蜗,死亡現(xiàn)場離奇詭異巨双,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)地消,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門炉峰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畏妖,“玉大人脉执,你說我怎么就攤上這事〗浣伲” “怎么了半夷?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長迅细。 經(jīng)常有香客問我巫橄,道長,這世上最難降的妖魔是什么茵典? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任湘换,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘彩倚。我一直安慰自己筹我,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布帆离。 她就那樣靜靜地躺著蔬蕊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪哥谷。 梳的紋絲不亂的頭發(fā)上岸夯,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音们妥,去河邊找鬼猜扮。 笑死,一個胖子當(dāng)著我的面吹牛监婶,可吹牛的內(nèi)容都是我干的破镰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼压储,長吁一口氣:“原來是場噩夢啊……” “哼鲜漩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起集惋,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤孕似,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后刮刑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喉祭,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年雷绢,在試婚紗的時候發(fā)現(xiàn)自己被綠了泛烙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡翘紊,死狀恐怖蔽氨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情帆疟,我是刑警寧澤鹉究,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站踪宠,受9級特大地震影響自赔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜柳琢,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一绍妨、第九天 我趴在偏房一處隱蔽的房頂上張望润脸。 院中可真熱鬧,春花似錦他去、人聲如沸津函。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尔苦。三九已至,卻和暖如春行施,著一層夾襖步出監(jiān)牢的瞬間允坚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工蛾号, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留稠项,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓鲜结,卻偏偏與公主長得像展运,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子精刷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一拗胜,什么是數(shù)據(jù)庫分區(qū)前段時間寫過一篇關(guān)于mysql分表的的文章,下面來說一下什么是數(shù)據(jù)庫分區(qū)怒允,以mysql為例埂软。m...
    MrKai平凡之路閱讀 1,160評論 0 5
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,448評論 0 13
  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當(dāng)在唯一索引所對應(yīng)的列上鍵入重復(fù)值時,會觸發(fā)此異常纫事。 O...
    我想起個好名字閱讀 5,249評論 0 9
  • 原文鏈接 http://blog.csdn.net/kobejayandy/article/details/547...
    lucode閱讀 898評論 0 0
  • 一勘畔、背景話說風(fēng)和日麗的一天,為提高隨著業(yè)務(wù)增長的大表(3510449行吧)的訪問效率丽惶,于是決定對表分區(qū)炫七,記錄如下。...
    peteLee閱讀 9,872評論 0 3