쿼리 튜닝
distinct한 값을 빠르게 뽑기 문제
gw1
2025. 11. 30. 22:51
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`phone` varchar(20) DEFAULT NULL,
`grade` varchar(20) DEFAULT '1',
`deleted` char(1) NOT NULL DEFAULT 'N',
PRIMARY KEY (`id`),
KEY `name` (`name`),
KEY `phone` (`phone`),
KEY `idx_grade` (`grade`)
) ENGINE=InnoDB AUTO_INCREMENT=12721043 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
데이터는 1200만건으로 많습니다.
select distinct grade from user where deleted = 'N';
deleted = 'Y' 삭제된건 빼고 grade 값의 목록을 가져오려고 합니다.
그 결과를 아래처럼 유저 목록에 셀렉션 박스 형태로 들어간다고 보시면 됩니다.

grade 값만 모아두는 grade 테이블을 두는게 더 낫고,
저렇게 유니크 값 목록을 쿼리로 뽑는게 좋은 방식은 아니지만,
튜닝 연습 목적으로 개선해보세요.



로딩 시간 20초 가량 소요
1. 인덱스 구성 변경 불가
2. 백엔드 쪽 어플리케이션 소스 및 쿼리만 변경 가능
3. 삭제된 경우, deleted = 'Y'는 데이터는 조회가 안되어야 정상임
grade 경우의 수는 사전에 알 수 없지만
100건 이하로 적다고 합시다.