Как я могу решить временную сложность следующего кода SQL?

0

Существует список транзакций пользователей. Каждый пользователь имеет несколько транзакций. Я написал следующий код, чтобы найти самые последние транзакции пользователей, а затем выбрать пользователей, у которых не было транзакций за последние семь дней или более, но я не знаю, какова сложность времени моего кода. Может ли кто-нибудь объяснить, как я могу развить временную сложность моего кода?

trans_date - дата транзакции.

select user_id,_date,datediff(curdate(),_date) 
 from(
      select t1.send_id as user_id,from_unixtime(t1.trans_date) as _date
      from transactionhistory as t1
      where from_unixtime(t1.trans_date) = 
                    (select max(from_unixtime(t2.trans_date))    
                     from transactionhistory as t2
                     where t2.send_id = t1.send_id)) as tab         
where datediff(curdate(),_date) > 7;

Вот вывод команды EXPLAIN

Изображение 174551

Теги:
optimization
time-complexity

1 ответ

0

Правильно ли этот запрос?

Чтобы обрабатывать каждого пользователя, тогда самый внутренний запрос должен быть from... t2 where t2.send_id = t1.send_id. Если это не вы, вы выбираете только самую новую запись одного пользователя с последней транзакцией в целом.

Я думаю, что это будет O (n ^ 2). Внешняя петля O (n) и внутренняя петля O (n).

  • 0
    Ты прав! Я случайно удалил эту строку при редактировании деталей вопроса. Я добавил это назад сейчас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню