테마
이 문제는 교재 18화 졸업 과제와 같은 이커머스 데이터베이스를 씁니다. 『튜너의 1년』을 순서대로 읽고 있다면 졸업 과제를 먼저 풀고 오세요. 아래 「테이블과 인덱스」 칸에 과제의 답 일부(제약 조건, 인덱스, 통계의 실제 상태)가 나옵니다.
상품 상세 화면의 「최신 리뷰」 칸은 그 상품의 리뷰를 작성일 역순으로 보여 주고 작성자 이름을 붙인다. 지난주 DB 패치와 통계 재수집 뒤로 "리뷰가 날짜순이 아니라 뒤죽박죽으로 나온다"는 고객 문의가 들어왔다.
개발자는 "인라인 뷰 안에 ORDER BY를 분명히 넣었고, 패치 전에는 잘 나왔다"라고 한다. 패치 전 계획에는 VIEW와 SORT ORDER BY 줄이 있었고, 고객 테이블은 PK로 NL 조인했다.
reviews: 15,000행 · 775블록 · review_id · product_id · customer_id · rating · content CLOB · created_at · 상품당 34 ~ 76건 · PK 말고는 인덱스가 없다customers: 5,230행 · 51블록 · customer_id PKSELECT r.review_id, r.rating, r.created_at, c.name
FROM (SELECT review_id, customer_id, rating, created_at
FROM reviews
WHERE product_id = :pid
ORDER BY created_at DESC) r,
customers c
WHERE c.customer_id = r.customer_id
-------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time | Buffers | Used-Mem |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 53 |00:00:00.01 | 826 | |
|* 1 | HASH JOIN | | 1 | 53 | 53 |00:00:00.01 | 826 | 1236K (0)|
|* 2 | TABLE ACCESS FULL| REVIEWS | 1 | 53 | 53 |00:00:00.01 | 775 | |
| 3 | TABLE ACCESS FULL| CUSTOMERS | 1 | 5230 | 5230 |00:00:00.01 | 51 | |
-------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - access("C"."CUSTOMER_ID"="CUSTOMER_ID")
2 - filter("PRODUCT_ID"=:PID)
[화면 맨 위 다섯 줄의 created_at]
2023-03-11 · 2024-08-02 · 2021-12-19 · 2024-11-30 · 2022-06-07
SORT ORDER BY와 VIEW 줄이 없는 이유를 설명하시오. 패치 전에는 순서가 맞게 나온 이유도 설명하시오.