У меня есть таблица 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.