我们都知道,在mysql的开发规范中,建议表上的主键使用自增id,这样在插入的时候,不用去排序,移动数据,减少了碎片发生,插入速度也不受影响,但是对于分区表,因为分区键需要包含在主键中,那么分区表的主键是选择业务字段还是使用自增id+分区键的方式?下面测试一下:
CREATE TABLE `t_table` (
`account_id` varchar(20) NOT NULL DEFAULT '',
`table_catalog` varchar(20) DEFAULT NULL,
`table_schema` varchar(20) DEFAULT NULL,
`table_name` varchar(20) DEFAULT NULL,
`table_type` varchar(20) DEFAULT NULL,
`engine` varchar(20) DEFAULT NULL,
`version` varchar(20) DEFAULT NULL,
`table_rows` varchar(20) DEFAULT NULL,
`checksum` varchar(20) DEFAULT NULL,
`table_comment` varchar(20) DEFAULT NULL,
`start_date` date NOT NULL DEFAULT '0000-00-00',
`end_date` date DEFAULT NULL,
PRIMARY KEY (`account_id`,`start_date`)
)
/*!50100 PARTITION BY RANGE (TO_DAYS(start_date))
(PARTITION p201510 VALUES LESS THAN (736268) ENGINE = InnoDB,
PARTITION p201511 VALUES LESS THAN (736298) ENGINE = InnoDB,
PARTITION p201512 VALUES LESS THAN (736329) ENGINE = InnoDB,
PARTITION p201601 VALUES LESS THAN (736360) ENGINE = InnoDB,
PARTITION p201602 VALUES LESS THAN (736389) ENGINE = InnoDB,
PARTITION p201603 VALUES LESS THAN (736420) ENGINE = InnoDB,
PARTITION p201604 VALUES LESS THAN (736450) ENGINE = InnoDB,
PARTITION p201605 VALUES LESS THAN (736481) ENGINE = InnoDB,
PARTITION p201606 VALUES LESS THAN (736511) ENGINE = InnoDB,
PARTITION p201607 VALUES LESS THAN (736542) ENGINE = InnoDB,
PARTITION p201608 VALUES LESS THAN (736573) ENGINE = InnoDB,
PARTITION p201609 VALUES LESS THAN (736603) ENGINE = InnoDB,
PARTITION p201610 VALUES LESS THAN (736634) ENGINE = InnoDB,
PARTITION p201611 VALUES LESS THAN (736664) ENGINE = InnoDB,
PARTITION p201612 VALUES LESS THAN (736695) ENGINE = InnoDB,
PARTITION p201701 VALUES LESS THAN (736726) ENGINE = InnoDB,
PARTITION p201702 VALUES LESS THAN (736754) ENGINE = InnoDB,
PARTITION p201703 VALUES LESS THAN (736785) ENGINE = InnoDB,
PARTITION p201704 VALUES LESS THAN (736815) ENGINE = InnoDB,
PARTITION p201705 VALUES LESS THAN (736846) ENGINE = InnoDB,
PARTITION p201706 VALUES LESS THAN (736876) ENGINE = InnoDB,
PARTITION p201707 VALUES LESS THAN (736907) ENGINE = InnoDB,
PARTITION p201708 VALUES LESS THAN (736938) ENGINE = InnoDB,
PARTITION p201709