У меня есть таблица, которая в настоящее время насчитывает около 80 миллионов строк, созданных следующим образом:
create table records
(
id int auto_increment primary key,
created int not null,
status int default '0' not null
)
collate = utf8_unicode_ci;
create index created_and_status_idx
on records (created, status);
Созданный столбец содержит метки времени Unix, а состояние может быть целым числом от -10 до 10. Записи равномернораспределено относительно даты создания, и около половины из них имеют статус 0 или -10.
У меня есть cron, который выбирает записи, которые имеют возраст от 32 до 8 дней, обрабатывает их, а затем удаляет их, навернякастатусы.Запрос выглядит следующим образом:
SELECT
records.id
FROM records
WHERE
(records.status = 0 OR records.status = -10)
AND records.created BETWEEN UNIX_TIMESTAMP() - 32 * 86400 AND UNIX_TIMESTAMP() - 8 * 86400
LIMIT 500
Запрос был быстрым, когда записи находились в начале интервала создания, но теперь, когда очистка достигает записей в конце интервала, требуется около 10 секунд, чтобызапустить.В объяснении запроса говорится, что он использует индекс, но анализирует около 40 миллионов записей.
У меня вопрос, есть ли что-нибудь, что я могу сделать, чтобы улучшить производительность запроса, и если да, то как именно.
Спасибо.