쿼리 성능 현황
사전 데이터 세팅
-- ConcertSchedule 데이터 삽입 (1,000,000건)
INSERT INTO concert_schedule (concert_id, schedule_date, is_sold_out)
SELECT
FLOOR(RAND() * 100 + 1) AS concert_id, -- 랜덤 콘서트 ID
DATE_ADD('2025-01-01', INTERVAL FLOOR(RAND() * 365) DAY) AS schedule_date, -- 랜덤 일정
RAND() > 0.5 AS is_sold_out -- 랜덤 매진 여부
FROM
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS tmp1,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS tmp2,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS tmp3,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS tmp4,
(SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5) AS tmp5;-- Seat 데이터 삽입 (스케줄 당 좌석 50개)
INSERT INTO seat (seat_number, concert_id, schedule_date, status, price)
SELECT
seat_number, -- 좌석 번호 (1~50)
cs.concert_id, -- 스케줄의 콘서트 ID
cs.schedule_date, -- 스케줄 날짜
CASE
WHEN RAND() > 0.8 THEN 'RESERVED'
ELSE 'AVAILABLE'
END AS status,
FLOOR(RAND() * 100000) AS price
FROM concert_schedule cs
CROSS JOIN (
SELECT @seat_num := @seat_num + 1 AS seat_number
FROM (SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) AS a,
(SELECT 0 UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) AS b,
(SELECT @seat_num := 0) AS init
) seat_gen
WHERE seat_number <= 50;쿼리 지연이 발생할 수 있는 로직
ConcertScheduleRepository
실행 계획

실행 계획

SeatRepository
실행 계획

실행 계획

Last updated