У меня есть таблица недавних действий на mySQL, ее MyISAM и содержит около 46 миллионов записей. Он был правильно проиндексирован и все, что сделано. Но для выполнения некоторых запросов все равно может потребоваться несколько секунд.
Поэтому мне было интересно, как лучше всего повысить производительность запросов в этой базе данных. Должен ли я разбить таблицу или удалить более старые данные? В основном я использую некоторые расчеты для данных за этот месяц для запросов, другое использование показывает пользователям их недавние действия, а также нам время от времени приходится вручную контролировать их действия.
Я думал удалить все данные старше этого года, что должно удалить около 24 миллионов строк. (так как прошло 4 месяца с начала этого месяца, поэтому старые данные не должны иметь такого большого значения).
Или я могу разделить по месяцам, но я не знаю, как это реализовано в laravel мне придется каждый раз менять разделы, чтобы получить данные старше, чем текущие месяцы?
Edit: этот 1 запрос является важным, он выполняется после определенного действия c от пользователя, и этот указанный c запрос выполнялся за 8 секунд и прошел 40 000 строк, используя индекс user_id. Что могло бы помочь мне в улучшении этого запроса, так это если бы он использовал множественный индекс, потому что тогда запрос был бы сужен до очень очень небольшого числа строк. Или, если я удаляю старые данные, тогда будет меньше строк до go до конца sh вычисления.
select *
from `recent_activites`
where `id` > 20443580
and `user_id` = 20580
and `updated_at` > '2020-04-01 00:00:00'
and `type` in (?, ?, ?, ?, ?, ?, ?, ?, ?) ```