我有一个MYSQL表与分区的年份和子分区的月份。MYSQL子分区修剪
CREATE TABLE ptable (
id INT NOT NULL AUTO_INCREMENT,
name varchar(100),
purchased DATETIME NOT NULL,
PRIMARY KEY (id, purchased)
)
PARTITION BY RANGE(YEAR(purchased))
SUBPARTITION BY HASH(MONTH(purchased))
SUBPARTITIONS 12 (
PARTITION p0 VALUES LESS THAN (2011),
PARTITION p1 VALUES LESS THAN (2012),
PARTITION p5 VALUES LESS THAN MAXVALUE
);
我对这张表的大部分查询都涉及年份或月份。当我尝试按月查询时,它不会正确修剪并扫描给定年份的所有12个子分区。
explain partitions
SELECT *
FROM ptable
WHERE purchased BETWEEN '2011-12-01' AND '2011-12-31';
我的问题是有办法告诉MYSQL只查询特定的子分区,当我知道年份和月份值?或者可能有更好的做法。我正在使用MYSQL 5.1。
+0
当分区制作正确时,mysql会自动执行,如果我是你,我会将日期转换为int unsigned并使用unix时间戳p分区 –