創(chuàng)建分區(qū)表
CREATE TABLE `partition_table_name` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` varchar(64) NOT NULL,
`id_card_num` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL,
`phone_num` varchar(30) NOT NULL,
`create_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`, `create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY RANGE ((year(create_time)*100+month(create_time))*100+day(create_time)) (
PARTITION p20170411 VALUES LESS THAN (20170412),
PARTITION s20170412 VALUES LESS THAN (20170413)
);
以上sql語(yǔ)句中,上半部分為普通的建表語(yǔ)句,唯一需要注意的是,需要把分區(qū)字段加入到PRIMARY KEY中。
下半部分sql語(yǔ)句則是創(chuàng)建表的各個(gè)分區(qū),以上語(yǔ)句是按照create_time字段進(jìn)行range類型的分區(qū)。(year(create_time)*100+month(create_time))*100+day(create_time)
所得的值為range分區(qū)的VALUES,值類似于"20170411"這樣的int整數(shù)。PARTITION p20170411 VALUES LESS THAN (20170412)
則表示創(chuàng)建了name為p20170411的分區(qū),當(dāng)對(duì)此表(partition_table_name)執(zhí)行插入語(yǔ)句時(shí),當(dāng)插入數(shù)據(jù)的create_time < “2017-04-12”時(shí),該條數(shù)據(jù)將被寫(xiě)入到p20170411分區(qū)表中。
向表中插入數(shù)據(jù)時(shí),若數(shù)據(jù)的create_time字段匹配到自己應(yīng)該被放入哪個(gè)分區(qū),則插入會(huì)失敗并報(bào)錯(cuò)。
p20170411這樣的分區(qū)表名可隨意取,但任然建議有一定的名稱代表意義。
向分區(qū)表中增加分區(qū)
ALTER TABLE bd_black_result
ADD PARTITION (PARTITION s20170413 VALUES LESS THAN (20170414));
增加的分區(qū)必須嚴(yán)格按照遞增的條件才能添加成功。如,不能ADD PARTITION (PARTITION s20170410 VALUES LESS THAN (20170411));
只能 ADD PARTITION (PARTITION s20170413 VALUES LESS THAN (20170414));或20170415或20170416……
查看分區(qū)情況
select
partition_name,
partition_expression,
partition_description,
table_rows
from information_schema.partitions where
table_name='partition_table_name'
查詢結(jié)果將展示該表各個(gè)分區(qū)表的情況,包括各個(gè)分區(qū)表中的數(shù)據(jù)條數(shù)。
刪除分區(qū)表
alter table partition_table_name drop partition p20170412;
刪除partition_table_name表中名稱為p20170412的分區(qū)表。同時(shí),其數(shù)據(jù)也被刪除。
刪除分區(qū)數(shù)據(jù)
delete from partition_table_name PARTITION (p20170412)
刪除partition_table_name中分區(qū)名稱為p20170412的所有數(shù)據(jù)
當(dāng)然,還可以有其他各種操作指定分區(qū)表的方法,如
select * from partition_table_name PARTITION (p20170412);
.
.
.
疑問(wèn)
過(guò)程中,發(fā)現(xiàn)當(dāng)數(shù)據(jù)量大的時(shí)候
select
partition_name,
partition_expression,
partition_description,
table_rows
from information_schema.partitions where
table_name='partition_table_name'
以上語(yǔ)句統(tǒng)計(jì)出的p20170412分區(qū)的table_rows數(shù)據(jù)和以下語(yǔ)句統(tǒng)計(jì)出的有一定差別
select count(*) from partition_table_name PARTITION (p20170412);
原因暫不知。