Всем привет. Есть следующая таблица (упрощенная):
CREATE TABLE `routes` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userId` int(11) NOT NULL,
`created` datetime NOT NULL,
`createdTimezoneOffset` smallint(6) NOT NULL DEFAULT '0',
`deleted` tinyint(1) DEFAULT '0',
PRIMARY KEY (`id`,`created`,`archive`)
) ENGINE=InnoDB AUTO_INCREMENT=1014699 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
Необходимо разделить таблицу следующим образом:
Раздел: Архив = 0
Подраздел: Год создания
Раздел: Архив = 1
Подраздел: Год создания
Делаю так:
ALTER TABLE routes PARTITION BY LIST (archive)
SUBPARTITION BY HASH (YEAR(created))
(
PARTITION p0 VALUES IN (0)
(
SUBPARTITION s0,
SUBPARTITION s1,
SUBPARTITION s2,
SUBPARTITION s3
),
PARTITION p1 VALUES IN (1)
(
SUBPARTITION s4,
SUBPARTITION s5,
SUBPARTITION s6,
SUBPARTITION s7
)
);
И все вроде бы работает. Но когда делаю выборку по периоду поля created - читаются все разделы.
Пример: EXPLAIN SELECT * FROM routes WHERE archive = 1 AND created >= '2020-01-01 00:00:00';
Исходя из документации - понимаю почему.
Как правильно разделить таблицу таким образом, чтобы запрос выше брал определенную часть таблицы ?