쇼핑몰 운영에서는 단순 조회뿐 아니라 통계와 분석도 중요하다. 물리 모델과 인덱스가 잘 설계되어 있으면, 이러한 복잡한 쿼리도 충분히 감당할 수 있다.
여기서는 대표적인 예시만 정리한다.
SELECT
DATE_FORMAT(ordered_at, '%Y-%m') AS order_month,
SUM(total_amount) AS monthly_revenue
FROM orders
WHERE order_status = 'COMPLETED'
GROUP BY DATE_FORMAT(ordered_at, '%Y-%m')
ORDER BY order_month;
ordered_at과 total_amount가 orders에 바로 들어 있기 때문에, JOIN 없이도 월별 매출을 집계할 수 있다.(order_status, ordered_at) 인덱스가 큰 도움이 된다.SELECT
product_id,
product_name,
SUM(order_quantity) AS total_quantity
FROM order_item
GROUP BY product_id, product_name
ORDER BY total_quantity DESC
LIMIT 10;
order_item이 주문 수량과 상품 정보를 함께 가지고 있으므로, 별도 JOIN 없이 베스트셀러 상품 TOP 10을 쉽게 뽑을 수 있다.SELECT
m.member_id,
m.member_name,
SUM(o.total_amount) AS total_spent
FROM member m
JOIN orders o ON m.member_id = o.member_id
WHERE o.order_status = 'COMPLETED'
GROUP BY m.member_id, m.member_name
HAVING total_spent >= 10000000
ORDER BY total_spent DESC;
member_id 인덱스 덕분에 회원–주문 조인이 효율적으로 수행된다.SELECT
product_id,
product_name,
stock_quantity
FROM product
WHERE stock_quantity < 5
ORDER BY stock_quantity ASC;
stock_quantity에 보조 인덱스를 두어 빠르게 조회할 수 있다.이처럼 잘 설계된 물리 모델과 인덱스, 그리고 적절한 역정규화는 운영 화면과 분석 화면 모두에서 강력한 기반이 된다.