Хранение изменившихся значений в БД

FB3

Новичок
Есть примерно такая табличка:
id - primary key, user_id, date, money_count

Имеется уникальный ключ на три поля date, user_id, money_count - таким образом с помощью INSERT IGNORE за один день получим меньше записей, если не менялось кол-во денег.

Табличка стала расти и решили проверять последнее значение money_count для определенного user_id и добавлять запись, если изменилось. Вот таким образом примерно выбираем последнее значение:
Код:
SELECT `money_count` FROM `table` WHERE `id` = (SELECT MAX(`id`) FROM `table` WHERE `user_id` = 215487
Затем сравниваем его с переданным значением и если переданное другое, то добавляем новую запись.
Таблица уменьшилась, но в последнее время этот запрос стал подтормаживать.

Вопрос: как вообще было бы логичнее хранить и обновлять данную информацию? Есть ли смысл сменить движок на InnoDB или тут это не поможет?
 

dimagolov

Новичок
почему не
Код:
SELECT `money_count` FROM `table` WHERE `user_id` = 215487 ORDER BY `id` DESC LIMIT 1
и индексы по `user_id`, `id` ?
 

FB3

Новичок
А память не будет жрать на десятке-другом миллионов записей? Если на каждого пользователя к примеру будет 100 записей?
 

dimagolov

Новичок
ну сделай explain и посмотри. да что там может жрать, если будет временная таблица на 100 записей?
 

korchasa

LIMB infected
Подзапрос в mysql выполняется для каждой строчки. Т.е. ты сделал n+1 запросов, где n - количество записей в таблице. Ну и умножь на количество пользователей, которых ты пересчитываешь.
 
Сверху