mysql partition table use to_days bug
to_days分區(qū)表 bug
CREATE TABLE `aaaaaaaaaa` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`year` int(4) NOT NULL,
`month` int(2) NOT NULL,
`day` int(2) NOT NULL,
`startTime` datetime NOT NULL,
`endTime` datetime NOT NULL,
`version` varchar(12) NOT NULL DEFAULT '',
`source` varchar(12) NOT NULL DEFAULT '',
`sid` varchar(12) NOT NULL,
`valid` int(8) NOT NULL,
`error` int(8) NOT NULL,
`total` int(8) NOT NULL,
PRIMARY KEY (`id`,`startTime`,`version`,`source`,`sid`),
KEY `aaaaaaaaaa_index_startTime` (`startTime`),
KEY `aaaaaaaaaa_index_endTime` (`endTime`),
KEY `aaaaaaaaaa_muti_index` (`year`,`month`,`source`),
KEY `aaaaaaaaaa_index_source` (`source`),
KEY `month_index` (`month`),
KEY `year_index` (`year`)
) ENGINE=InnoDB AUTO_INCREMENT=1267666446 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (to_days(startTime))
(PARTITION p20160405 VALUES LESS THAN (736425) ENGINE = InnoDB,
PARTITION p20160620 VALUES LESS THAN (736501) ENGINE = InnoDB,
PARTITION p20160706 VALUES LESS THAN (736517) ENGINE = InnoDB) */
執(zhí)行下面的sql,
mysql 會(huì)crash
select sid as sid,source as source,sum(valid) as valid,sum(error) as error from aaaaaaaaaa where startTime>="2016-07-08 10:00:00"
通過下面的方法可以fix
alter table aaaaaaaaaa add PARTITION (partition p_max values less than(maxvalue));
另:
CREATE TABLE `aaaaaaaaaa` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`year` int(4) NOT NULL,
`month` int(2) NOT NULL,
`day` int(2) NOT NULL,
`startTime` datetime NOT NULL,
`endTime` datetime NOT NULL,
`version` varchar(12) NOT NULL DEFAULT '',
`source` varchar(12) NOT NULL DEFAULT '',
`sid` varchar(12) NOT NULL,
`valid` int(8) NOT NULL,
`error` int(8) NOT NULL,
`total` int(8) NOT NULL,
PRIMARY KEY (`id`,`startTime`,`version`,`source`,`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=1267666446 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (to_days(startTime))
(PARTITION p20160405 VALUES LESS THAN (736425) ENGINE = InnoDB,
PARTITION p20160620 VALUES LESS THAN (736501) ENGINE = InnoDB,
PARTITION p20160706 VALUES LESS THAN (736517) ENGINE = InnoDB) */
這樣不會(huì)出現(xiàn)上面的問題
但如果把starttime列加上索引 ,就會(huì)有這個(gè)問題
CREATE TABLE `aaaaaaaaaa` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`year` int(4) NOT NULL,
`month` int(2) NOT NULL,
`day` int(2) NOT NULL,
`startTime` datetime NOT NULL,
`endTime` datetime NOT NULL,
`version` varchar(12) NOT NULL DEFAULT '',
`source` varchar(12) NOT NULL DEFAULT '',
`sid` varchar(12) NOT NULL,
`valid` int(8) NOT NULL,
`error` int(8) NOT NULL,
`total` int(8) NOT NULL,
PRIMARY KEY (`id`,`startTime`,`version`,`source`,`sid`),
KEY `aaaaaaaaaa_index_startTime` (`startTime`)
) ENGINE=InnoDB AUTO_INCREMENT=1267666446 DEFAULT CHARSET=utf8
/*!50100 PARTITION BY RANGE (to_days(startTime))
(PARTITION p20160405 VALUES LESS THAN (736425) ENGINE = InnoDB,
PARTITION p20160620 VALUES LESS THAN (736501) ENGINE = InnoDB,
PARTITION p20160706 VALUES LESS THAN (736517) ENGINE = InnoDB) */
MOS沒有找到相關(guān)的bug
5.1 5.6 中都沒有這個(gè)問題,5.5.24中有這個(gè)問題
轉(zhuǎn)載請(qǐng)注明源出處
QQ 273002188 歡迎一起學(xué)習(xí)
QQ 群 236941212
oracle,mysql,PG 相互交流