【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