Задать вопрос
dzheka3d
@dzheka3d

Как правильно хранить время последнего визита пользователя?

Всем привет! Пытаюсь организовать отображение "пользователь был N времени назад". Для этого сохраняю время последнего визита пользователя при открытии страницы с помощью запроса:
UPDATE `users` SET `last_visited` = CURRENT_TIMESTAMP WHERE `id` = 1

Этот запрос выполняется 15-20мс, что достаточно долго, т.к. вся страница с десятками SELECT запросов генерируется за 30-35мс.
Решил вынести этот параметр в отдельную таблицу `users_last_visited`. Но это не принесло результата. INSERT ... ON DUPLICATE KEY UPDATE так и выполняется 15-20мс

Подскажите как мне правильно хранить last_visited так, чтобы не терять эти 15мс серверного времени?
  • Вопрос задан
  • 115 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега MySQL
Кардинально ускорить UPDATE не выйдет.

Если критично время, то лучше класть значение в Redis, а оттуда уже фоновым скриптом переносить в таблицу (если вообще этот шаг нужен, потому что данные жалко потерять).

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

Или убрать ON DUPLICATE KEY UPDATE, кидать в таблицу каждый раз новую строку, а потом в фоне её периодически пылесосить от мусора.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Как вариант - сначала делать UPDATE, а потом, если нет изменённых сторок, INSERT IGNORE.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы