Я пишу sql, чтобы каждый день перечислять активного пользователя с его первой датой появления в таблице журнала. Версия MySQL - 5.7 .
Как:
date active_users reg_date
2020-03-1 user1 2019-02-01
2020-03-1 user2 2019-03-04
2020-03-2 user3 2019-01-18
2020-03-2 user1 2019-02-01
Я выполнил запрос для достижения этой цели, но, как показано, я сделал 2 агрегации для той же таблицы, а затем соединить их вместе ... Таблица журнала входа game_user_log
содержит 2 million
строк данных, и я добавил индекс для столбцов data_date
и data_date
, но мой запрос занимает около 1 minute
.
Есть ли способ оптимизировать и ускорить запрос? Любая помощь приветствуется.
Это мой запрос:
SELECT a.data_date, a.user_id, b.reg_date
-- List every day and de-duplicated users
from ( SELECT distinct data_date, user_id
from `game_user_log`) a
-- Get the first login date as reg_date
left outer join ( SELECT user_id, min(data_date) reg_date
FROM `game_user_log`
GROUP BY user_id) b
on a.user_id=b.user_id