【发布时间】:2018-10-09 18:53:49
【问题描述】:
我现在有一个空表,但将加载数亿条记录。在执行此加载之前,我想在表上创建一些分区以提高查询性能并在以后启用更好的删除(只需截断整个分区)。
我正在使用的更改表代码是:
ALTER TABLE `TABLE_NAME`
PARTITION BY RANGE (YEAR(DATE_FIELD)) (
PARTITION y1 VALUES LESS THAN (2017),
PARTITION y2 VALUES LESS THAN (2018),
PARTITION y3 VALUES LESS THAN (2019),
PARTITION ymax VALUES LESS THAN (2050)
);
当我在 MySQL Workbench 中运行代码时,它运行良好,没有任何错误。当我检查表时,分区未显示在列表中:
在自动生成的 DDL 中,分区被注释掉了:
CREATE TABLE `TABLE_NAME` (
`field1` decimal(5,2) DEFAULT NULL,
`field2` decimal(5,2) DEFAULT NULL,
`DATE_FIELD` date NOT NULL,
`field3` float DEFAULT NULL,
`field4` float DEFAULT NULL,
`field5` datetime DEFAULT NULL,
`field6` varchar(50) NOT NULL,
PRIMARY KEY (`field6`,`DATE_FIELD`),
KEY `dd_IDX1` (`DATE_FIELD`,`field1`,`field2`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
/*!50100 PARTITION BY RANGE (year(`DATE_FIELD`))
(PARTITION y1 VALUES LESS THAN (2017) ENGINE = InnoDB,
PARTITION y2 VALUES LESS THAN (2018) ENGINE = InnoDB,
PARTITION y3 VALUES LESS THAN (2019) ENGINE = InnoDB,
PARTITION ymax VALUES LESS THAN (2050) ENGINE = InnoDB) */
我不知道为什么会这样。我加载了一些虚假记录,以查看是否缺少数据导致了问题。我还尝试注释掉分区并创建了一个新表,但没有成功。
【问题讨论】:
标签: mysql partitioning