쿼리 튜닝

최근 접속자 목록 조회 문제

gw1 2025. 8. 20. 22:56

 

CREATE TABLE `login_log` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(50) NOT NULL,
  `login_at` datetime DEFAULT CURRENT_TIMESTAMP,
  `user_id` int DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_login_at_user_id` (`login_at`,`user_id`),
  KEY `idx_user_id_login_at` (`user_id`,`login_at`)
) ENGINE=InnoDB

 
로그인을 할 때 마다, 로그인 시각, 유저 아이디 값이 저장되는 형태
한 명의 유저 로그인 기록이 여러 개 다수 존재합니다.
 
인덱스 구성
  KEY `idx_login_at_user_id` (`login_at`,`user_id`),
  KEY `idx_user_id_login_at` (`user_id`,`login_at`)
 

 
 
총 100만 개 레코드가 있음

select user_id, max(login_at) as last_login
from login_log 
group by  user_id
order by last_login DESC limit 10;

 
 

약 1.1초 소요(실행 계획상 인덱스에서 100만 건을 읽고, 정렬함)
 
해당 쿼리 속도를 딜레이가 아예 없는 수준으로 개선하세요.
 
쿼리 결과에는 서로 다른 10명이 나와야 합니다.

간헐적으로 서로 다른 유저가 로그인 시각이 시 분 초 단위까지 같을 수 있으나,
그런 케이스는 무시 해도 됩니다.
 

'쿼리 튜닝' 카테고리의 다른 글

휴먼 회원 조회 문제  (0) 2025.12.12
distinct한 값을 빠르게 뽑기 문제  (2) 2025.11.30
JOIN+Range Scan 충돌 문제  (0) 2025.10.21
OOM(Out of Memeory) 문제  (5) 2025.10.05
2차 정렬로 인한 문제  (0) 2025.09.27