Используйте партиционирование (partitioning).
Это как раз и есть способ разбиения разбиения большой таблицы на логические части по определенным критериям. В вашем случае это будет поле дата. Например:
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT,
store_id INT
)
PARTITION BY RANGE ( YEAR(separated) ) (
PARTITION p0 VALUES LESS THAN (1991),
PARTITION p1 VALUES LESS THAN (1996),
PARTITION p2 VALUES LESS THAN (2001),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
Пример
отсюда
Впрочем миллион строк это действительно немного и возможно стоить начать с индексов