Mysql表分区
參考地址:http://dev.mysql.com/doc/refman/5.6/en/partitioning.html
什么時(shí)候使用分區(qū)
?
分區(qū)的限制
| ABS() | CEILING() | DAY() |
| DAYOFMONTH() | DAYOFWEEK() | DAYOFYEAR() |
| DATEDIFF() | EXTRACT()? | FLOOR() |
| HOUR() | MICROSECOND() | MINUTE() |
| MOD() | MONTH() | QUARTER() |
| SECOND() | TIME_TO_SEC() | TO_DAYS() |
| TO_SECONDS() | UNIX_TIMESTAMP() | WEEKDAY() |
| YEAR() | ? | YEARWEEK() |
?
?
?
?
?
?
?
?
?
MySQL支持RANGE,LIST,HASH,KEY分區(qū)類型,其中以RANGE最為常用:
?
分區(qū)SQL
過濾分區(qū)表的WHERE條件必須是切分分區(qū)表的列
range分區(qū)
ALTER TABLE employees PARTITION BY RANGE (store_id) ( ??? PARTITION p0 VALUES LESS THAN (6), ??? PARTITION p1 VALUES LESS THAN (11), ??? PARTITION p2 VALUES LESS THAN (16), ??? PARTITION p3 VALUES LESS THAN (21) );list分區(qū)
ALTER TABLE employees PARTITION BY LIST(store_id) ( ??? PARTITION pNorth VALUES IN (3,5,6,9,17), ???PARTITION pEast VALUES IN (1,2,10,11,19,20), ??? PARTITION pWest VALUES IN (4,12,13,14,18), ??? PARTITION pCentral VALUES IN (7,8,15,16) );hash分區(qū)
hash分區(qū)的目的是將數(shù)據(jù)均勻的分布到預(yù)先定義的各個(gè)分區(qū)中,保證各分區(qū)的數(shù)據(jù)量大致一致。
ALTER TABLE employees PARTITION BY HASH(store_id) PARTITIONS 4;hash的分區(qū)函數(shù)頁需要返回一個(gè)整數(shù)值。partitions子句中的值是一個(gè)非負(fù)整數(shù),不加的partitions子句的話,默認(rèn)為分區(qū)數(shù)為1。
key分區(qū)
key分區(qū)和hash分區(qū)相似,不同在于hash分區(qū)是用戶自定義函數(shù)進(jìn)行分區(qū),key分區(qū)使用mysql數(shù)據(jù)庫提供的函數(shù)進(jìn)行分區(qū),NDB cluster使用MD5函數(shù)來分區(qū),對(duì)于其他存儲(chǔ)引擎mysql使用內(nèi)部的hash函數(shù),這些函數(shù)基于password()一樣的算法。
ALTER TABLE tm1 ?PARTITION BY KEY(s1) PARTITIONS 10;columns分區(qū)
上面的RANGE、LIST、HASH、KEY四種分區(qū)中,分區(qū)的條件必須是整形,如果不是整形需要通過函數(shù)將其轉(zhuǎn)換為整形。
mysql-5.5開始支持COLUMNS分區(qū),可視為RANGE和LIST分區(qū)的進(jìn)化,COLUMNS分區(qū)可以直接使用非整形數(shù)據(jù)進(jìn)行分區(qū)。COLUMNS分區(qū)支持以下數(shù)據(jù)類型:
所有整形,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL則不支持。
日期類型,如DATE和DATETIME。其余日期類型不支持。
字符串類型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT類型不支持。
COLUMNS可以使用多個(gè)列進(jìn)行分區(qū)。
?
子分區(qū)Subpartitioning
ALTER TABLE ts? PARTITION BY RANGE( YEAR(purchased) ) ??? SUBPARTITION BY HASH( TO_DAYS(purchased) ) ??? SUBPARTITIONS 2 ( ??????? PARTITION p0 VALUES LESS THAN (1990), ??????? PARTITION p1 VALUES LESS THAN (2000), ??????? PARTITION p2 VALUES LESS THAN MAXVALUE ); ? ?管理分區(qū)
增加分區(qū) ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000)); 刪除分區(qū) ALTER TABLE tr DROP PARTITION p2; 合并分區(qū) ALTER TABLE members ??? REORGANIZE PARTITION p0 INTO ( ??????? PARTITION n0 VALUES LESS THAN (1960), ??????? PARTITION n1 VALUES LESS THAN (1970) );轉(zhuǎn)載于:https://www.cnblogs.com/leafsunday/p/6418133.html
總結(jié)
- 上一篇: Oracle 12C R2-新特性-转换
- 下一篇: MySQL-MongoDB开源监控利器之