MySQL分割槽表
MySQL分割槽表
1.Range分割槽
最常用的一種分割槽方式
比如按照日期進行分割槽
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`ActionTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by range(UNIX_TIMESTAMP(ActionTime))
(
partition p201506 VALUES LESS THAN(UNIX_TIMESTAMP('2015-06-01 00:00:00')),
partition p201507 VALUES LESS THAN(UNIX_TIMESTAMP('2015-07-01 00:00:00')),
partition p201508 VALUES LESS THAN(UNIX_TIMESTAMP('2015-08-01 00:00:00'))
);
增加分割槽
alter table award_gift_record ADD PARTITION (PARTITION p201509 VALUES LESS THAN (UNIX_TIMESTAMP('2015-09-01 00:00:00')));
alter table award_gift_record ADD PARTITION (PARTITION pmax VALUES LESS THAN MAXVALUE);
刪除分割槽
alter table award_gift_record DROP PARTITION p201506;
2.List分割槽
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`AwardGiftID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by list(AwardGiftID)
(
partition p0 values in (0),
partition p1_3 values in (1,2,3)
);
增加分割槽
alter table award_gift_record ADD PARTITION (PARTITION p4_6 values in (4,5,6));
alter table award_gift_record ADD PARTITION (PARTITION pnull VALUES in (null));
刪除分割槽
alter table award_gift_record DROP PARTITION p0;
3.Hash分割槽
自定義函式進行Hash分割槽
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`ActionTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by hash(UNIX_TIMESTAMP(ActionTime))
partitions 6;
4.Key分割槽
使用MySQL內部的雜湊函式
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`AwardGiftID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by key(AwardGiftID)
partitions 6;
5.Columns分割槽
前面四種分割槽型別,分割槽的條件必須是整形,如果欄位不是整形,則透過函式進行轉化。
MySQL 5.5開始支援Columns分割槽,可以使用非整形欄位進行分割槽.
Columns分割槽支援一下資料型別
所有的整形(INT,SMALLINT,TINYINT,BIGINT)
日期型別(DATE,DATETIME) 注意時間戳型別是不支援的,時間戳需要使用Range分割槽
字串型別(CHAR,VARCHAR,BINARY,VARBINARY) BLOB,TEXT型別不支援
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`ActionTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by range columns(ActionTime)
(
partition p201506 values less than ('2015-06-01'),
partition p201507 values less than ('2015-07-01')
);
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`NickName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by list columns(NickName)
(
partition pa values in ('a','b','c')
);
6.子分割槽
MySQL資料庫可以在Range和List分割槽的基礎上,再進行Hash或者Key的子分割槽。
子分割槽好像沒有想象中的那麼有用..
分割槽中的null值
MySQL資料庫分割槽總是把null值視為小於任何一個非空值。
Range分割槽,null值作為最小的值,放入第一個分割槽.
List分割槽,需要有null的列表,否則插入報錯.
alter table award_gift_record ADD PARTITION (PARTITION pnull VALUES in (null));
Hash,Key分割槽
null值作為0處理
1.Range分割槽
最常用的一種分割槽方式
比如按照日期進行分割槽
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`ActionTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by range(UNIX_TIMESTAMP(ActionTime))
(
partition p201506 VALUES LESS THAN(UNIX_TIMESTAMP('2015-06-01 00:00:00')),
partition p201507 VALUES LESS THAN(UNIX_TIMESTAMP('2015-07-01 00:00:00')),
partition p201508 VALUES LESS THAN(UNIX_TIMESTAMP('2015-08-01 00:00:00'))
);
增加分割槽
alter table award_gift_record ADD PARTITION (PARTITION p201509 VALUES LESS THAN (UNIX_TIMESTAMP('2015-09-01 00:00:00')));
alter table award_gift_record ADD PARTITION (PARTITION pmax VALUES LESS THAN MAXVALUE);
刪除分割槽
alter table award_gift_record DROP PARTITION p201506;
2.List分割槽
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`AwardGiftID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by list(AwardGiftID)
(
partition p0 values in (0),
partition p1_3 values in (1,2,3)
);
增加分割槽
alter table award_gift_record ADD PARTITION (PARTITION p4_6 values in (4,5,6));
alter table award_gift_record ADD PARTITION (PARTITION pnull VALUES in (null));
刪除分割槽
alter table award_gift_record DROP PARTITION p0;
自定義函式進行Hash分割槽
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`ActionTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by hash(UNIX_TIMESTAMP(ActionTime))
partitions 6;
使用MySQL內部的雜湊函式
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`AwardGiftID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by key(AwardGiftID)
partitions 6;
5.Columns分割槽
前面四種分割槽型別,分割槽的條件必須是整形,如果欄位不是整形,則透過函式進行轉化。
MySQL 5.5開始支援Columns分割槽,可以使用非整形欄位進行分割槽.
Columns分割槽支援一下資料型別
所有的整形(INT,SMALLINT,TINYINT,BIGINT)
日期型別(DATE,DATETIME) 注意時間戳型別是不支援的,時間戳需要使用Range分割槽
字串型別(CHAR,VARCHAR,BINARY,VARBINARY) BLOB,TEXT型別不支援
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`ActionTime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by range columns(ActionTime)
(
partition p201506 values less than ('2015-06-01'),
partition p201507 values less than ('2015-07-01')
);
CREATE TABLE award_gift_record (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',
`NickName` varchar(100) NOT NULL DEFAULT '',
`AwardGiftID` int(11) NOT NULL DEFAULT '-1' COMMENT '禮物ID',
`ActionTime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`ID`,`NickName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='抽獎記錄表'
partition by list columns(NickName)
(
partition pa values in ('a','b','c')
);
6.子分割槽
MySQL資料庫可以在Range和List分割槽的基礎上,再進行Hash或者Key的子分割槽。
子分割槽好像沒有想象中的那麼有用..
分割槽中的null值
MySQL資料庫分割槽總是把null值視為小於任何一個非空值。
Range分割槽,null值作為最小的值,放入第一個分割槽.
List分割槽,需要有null的列表,否則插入報錯.
alter table award_gift_record ADD PARTITION (PARTITION pnull VALUES in (null));
Hash,Key分割槽
null值作為0處理
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1709895/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MYSQL】 分割槽表MySql
- MySQL 分割槽表MySql
- MySQL 分割槽表探索MySql
- mysql 分表 分割槽MySql
- mysql 分割槽表用法MySql
- MySQL表分割槽管理MySql
- MySQL 分割槽表 partition線上修改分割槽欄位MySql
- mysql 進行表分割槽MySql
- Mysql表分割槽實現MySql
- mysql分割槽表筆記MySql筆記
- MySQL入門--分割槽表MySql
- mysql —— 分表分割槽(1)MySql
- MySQL的List分割槽表MySql
- MySQL分割槽表的分割槽原理和優缺點MySql
- 將mysql非分割槽錶轉換為分割槽表MySql
- MySQL 分割槽表知識整理MySql
- MySQL調優之分割槽表MySql
- mysql的分割槽和分表MySql
- mysql的分割槽與分表MySql
- mysql分割槽表小結2MySql
- mysql表水平拆分和分割槽分表MySql
- oracle分割槽表和分割槽表exchangeOracle
- MySQL資料表分割槽手記MySql
- (3) MySQL分割槽表使用方法MySql
- mysql之分割槽表小結1MySql
- 全面學習分割槽表及分割槽索引(13)--分隔表分割槽索引
- oracle分割槽表和非分割槽表exchangeOracle
- mysql~關於mysql分割槽表的測試MySql
- Oracle分割槽表及分割槽索引Oracle索引
- INTERVAL分割槽表鎖分割槽操作
- mysql 分割槽MySql
- MySQL分割槽MySql
- 全面學習分割槽表及分割槽索引(9)--刪除表分割槽索引
- 全面學習分割槽表及分割槽索引(11)--合併表分割槽索引
- 全面學習分割槽表及分割槽索引(12)--修改list表分割槽索引
- 學習筆記】分割槽表和分割槽索引——新增表分割槽(二)筆記索引
- 如何查詢分割槽表的分割槽及子分割槽
- 第41期:MySQL 雜湊分割槽表MySql