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 |