【发布时间】:2016-08-23 11:18:16
【问题描述】:
我有一个 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。
【问题讨论】:
-
mysql 会在分区正确时自动执行,如果我是你,我会将日期转换为 int unsigned 并使用 unix 时间戳进行分区
标签: mysql database-partitioning