Mysql表分区
參考地址:http://dev.mysql.com/doc/refman/5.6/en/partitioning.html
什么時候使用分區
?
分區的限制
| 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分區類型,其中以RANGE最為常用:
?
分區SQL
過濾分區表的WHERE條件必須是切分分區表的列
range分區
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分區
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分區
hash分區的目的是將數據均勻的分布到預先定義的各個分區中,保證各分區的數據量大致一致。
ALTER TABLE employees PARTITION BY HASH(store_id) PARTITIONS 4;hash的分區函數頁需要返回一個整數值。partitions子句中的值是一個非負整數,不加的partitions子句的話,默認為分區數為1。
key分區
key分區和hash分區相似,不同在于hash分區是用戶自定義函數進行分區,key分區使用mysql數據庫提供的函數進行分區,NDB cluster使用MD5函數來分區,對于其他存儲引擎mysql使用內部的hash函數,這些函數基于password()一樣的算法。
ALTER TABLE tm1 ?PARTITION BY KEY(s1) PARTITIONS 10;columns分區
上面的RANGE、LIST、HASH、KEY四種分區中,分區的條件必須是整形,如果不是整形需要通過函數將其轉換為整形。
mysql-5.5開始支持COLUMNS分區,可視為RANGE和LIST分區的進化,COLUMNS分區可以直接使用非整形數據進行分區。COLUMNS分區支持以下數據類型:
所有整形,如INT SMALLINT TINYINT BIGINT。FLOAT和DECIMAL則不支持。
日期類型,如DATE和DATETIME。其余日期類型不支持。
字符串類型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT類型不支持。
COLUMNS可以使用多個列進行分區。
?
子分區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 ); ? ?管理分區
增加分區 ALTER TABLE members ADD PARTITION (PARTITION p3 VALUES LESS THAN (2000)); 刪除分區 ALTER TABLE tr DROP PARTITION p2; 合并分區 ALTER TABLE members ??? REORGANIZE PARTITION p0 INTO ( ??????? PARTITION n0 VALUES LESS THAN (1960), ??????? PARTITION n1 VALUES LESS THAN (1970) );轉載于:https://www.cnblogs.com/leafsunday/p/6418133.html
總結
- 上一篇: Oracle 12C R2-新特性-转换
- 下一篇: MySQL-MongoDB开源监控利器之