MySQL innoDB 8.0기준
다른 DB는 결과가 다를 수 있음
CREATE TABLE `orders` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT,
`user_id` int DEFAULT NULL,
`order_status` varchar(30) NOT NULL DEFAULT 'CREATED',
`order_date` datetime DEFAULT NULL,
`price` bigint DEFAULT '0',
`amount` bigint DEFAULT '0',
`sum_price` bigint GENERATED ALWAYS AS ((`price` * `amount`)) STORED,
PRIMARY KEY (`id`),
KEY `order_date` (`order_date`),
KEY `sum_price` (`sum_price`)
) ENGINE=InnoDB AUTO_INCREMENT=8388611 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
sum_price STORED는 곱셈 결과를 자동으로 계산 해주는 값이라 딱히 신경 안써도 됩니다.

전체 데이터 분포는 2025년 데이터만 있고
총 838만개 입니다.

총 한달 치 데이터는 71만개
구하고자 하는 쿼리
SELECT
*
FROM
test.orders
WHERE
order_date BETWEEN '2025-03-01 00:00:00'
AND '2025-03-31 23:59:59'
ORDER BY
sum_price DESC,
id
LIMIT
10, 10;
한달치 범위에서 합계 금액 내림차순으로 페이징으로 가져옵니다.
단, 합계 금액이 중복 값이 많아 정렬이 꼬일 수 있어 PK인 id로 2차 추가 정렬합니다.


쿼리 실행 시 26~27초가 걸리고 ALL로 풀스캔합니다.
현재 테이블에 생성된 인덱스는 아래 2개 입니다.
KEY `order_date` (`order_date`),
KEY `sum_price` (`sum_price`)
조회가 느린 해당 문제를 해결하세요.
1. 인덱스 추가 없이 해결하는 방법
2. 인덱스 추가로 해결하는 방법
을 제시하세요.
두개 다 맞춰야 정답으로 인정