【mysqlパーティション表】mysql時間別パーティション【partition】
4550 ワード
皆さん、こんにちは、私はダックです:今日mysqlパーティションについて分かち合います.
必要:
時間分割千万データ程度のテーブルをパーティション化し,データの増加量は千万/年程度である.
コード実装:
シミュレーション前に既に存在していたテーブル:
必要:
時間分割千万データ程度のテーブルをパーティション化し,データの増加量は千万/年程度である.
コード実装:
シミュレーション前に既に存在していたテーブル:
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ' id',
`description` varchar(512) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`state` tinyint(4) NULL DEFAULT 0 COMMENT '0: ,1: ,2: ,3: ',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT ' '
) ;
#
alter table test modify id int;
#
alter table test drop PRIMARY KEY;
#
alter table test add PRIMARY KEY(id,create_time);
#id
alter table test modify id int AUTO_INCREMENT;
# , , 。
#ALTER TABLE test ADD UNIQUE (serial_no,delete_flag);
# , 1
ALTER TABLE test PARTITION BY RANGE COLUMNS(create_time ) (
PARTITION p1 VALUES LESS THAN ( '20190101'),
PARTITION p2 VALUES LESS THAN ( '20200101'),
PARTITION p3 VALUES LESS THAN ( '20210101'),
PARTITION p4 VALUES LESS THAN ( '20220101'),
PARTITION p5 VALUES LESS THAN ( '20230101'),
PARTITION p6 VALUES LESS THAN ( '20240101'),
PARTITION p7 VALUES LESS THAN ( '20250101'),
PARTITION p8 VALUES LESS THAN ( '20260101'),
PARTITION p9 VALUES LESS THAN ( '20270101')
);
:
mysql
RANGE :
, 。
LIST :
RANGE , LIST 。
HASH :
, 。 MySQL 、 。
KEY :
HASH , KEY , MySQL 。 。
:
RANGE/LIST 。 HASH/KEY 。
:
# :
CREATE TABLE `test` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ' id',
`description` varchar(512) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
`state` tinyint(4) NULL DEFAULT 0 COMMENT '0: ,1: ,2: ,3: ',
`create_time` datetime(0) NULL DEFAULT NULL COMMENT ' ',
PRIMARY KEY (`id`) USING BTREE,
INDEX `etc_cg_document_i4`(`state`) USING BTREE,
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact PARTITION BY RANGE (`id`)
PARTITIONS 2
(PARTITION `p1` VALUES LESS THAN (10000) ENGINE = InnoDB MAX_ROWS = 0 MIN_ROWS = 0 ,
PARTITION `p2` VALUES LESS THAN (20000) ENGINE = InnoDB MAX_ROWS = 0 MIN_ROWS = 0 )
;
# :( id )
alter table test partition by range(id)
(
partition p1 values less than (10000),
partition p2 values less than (20000)
);
# :
alter table test drop partition p1;
# :
Alter table test remove partitioning;
#
SELECT
PARTITION_NAME,
TABLE_ROWS
FROM
INFORMATION_SCHEMA.PARTITIONS
WHERE
TABLE_NAME = 'test';
, , , 。
mysql , :
https://blog.csdn.net/fdipzone/article/details/79769524
mysql :
https://blog.csdn.net/afsvsv/article/details/84998119
mysql :
https://www.cnblogs.com/sweet521/p/6439598.html