Я получил вопрос относительно моей базы данных MySQL и хотел бы получить информацию о том, что будет наиболее эффективным.
Моя проблема заключается в следующем,
Я разрабатываю расширенную функциональность для своего веб-сайта по настольной игре. Одной из премиальных функциональных возможностей будет то, что все игры, в которые играл пользователь, будут храниться «навсегда» (чтобы пользователь мог потом посмотреть вверх). Для обычных пользователей игры старше 18 месяцев удаляются.
Теперь мне нужно найти эффективный способ удаления игр (возраст которых более 18 месяцев) для обычных не премиум-пользователей и сохранить игры для премиум-пользователей.
Упрощение вещей Я получил две таблицы (на самом деле есть еще одна таблица, в которой хранятся участники игры для каждой игры):
Игры
id=INT
play_date=DATETIME
end_score=INT
player_id_1=INT
player_id_2=INT
Пользователи
id=INT
premium=BOOLEAN (true=enabled, false=not enabled)
Таблица пользователей содержит более 300 000 строк, а таблица игр содержит несколько миллионов строк. Каждый день около 20.000 игр
добавляются в таблицу игр.
Какой самый эффективный способ удалить игры старше 18 месяцев у пользователей без премиум-статуса.
До сих пор мы удаляли игры старше 18 месяцев для ВСЕХ пользователей каждое утро понедельника.
Теперь мне нужно учитывать премиальную стоимость и дату игры.
Несколько решений (?):
- ПРИСОЕДИНЕНИЕ к таблицам, хотя мы говорим о миллионах строк в таблице игр, это было бы нет-нет?
- Получить каждую запись в игре старше 18 месяцев, затем получить запись для каждого пользователя из player_id_1 & player_id_2, и если ЛЮБОЙ из них
Премиум, пусть будет игра, иначе удалите ее, если она старше 18 месяцев. Так, на одну неделю это может быть 20 000 * 7 = 140 000 игр.
- Над решением, кроме того, что я делаю это каждый час. Затем я должен получить и проверить около 1000 игр.
- ?? добавить какую-нибудь вспомогательную переменную в таблицу игр? Но что, если пользователь перестанет использовать премиум ....
Любые советы приветствуются ...