
이번 주차는 기존 DB설계로 적절한 index를 지정하여 쿼리의 병목현상이나 특정 기능에 대한 조회 개선을 목표로 하는 과정이었습니다.
기본적으로 DB는 중복을 없애고, 동일한 정보를 갖는 데이터의 정합성을 보장해야합니다.
하지만, 비즈니스적으로 요구사항에 따라, 혹은 조회의 성능이 중요한 경우에는 반정규화를 통해 조인 조건을 줄이는 방향으로 중복을 허용할 수 있습니다.
인덱스 설계 전략은 단일/복합 인덱스로, 조합 조건, 정렬, 그룹핑을 고려하여 카디널리티가 높은 칼럼을 지정합니다.
EXPLAIN을 통해 쿼리를 실행 계획을 확인하고, type=ALL, key=NULL, Using filesort, Using temporary 등 병목을 탐지하여 인덱스를 지정하고, 쿼리의 조건을 조정합니다.
@ManyToOne, @OneToMany, @JoinColumn 활용한 FK 연결 생성, 양방향 참조하도록 변경했습니다.OrderItem에 대한 역정규화를 적용했습니다.OrderItem.orderedAt을 nullable로 지정하여 Order 생성을 위한 객체 상태일 때는 null이고,Order의 생성자에서 OrderItem.orderedAt 반정규화 필드를 동기화하도록 작성했습니다.index 추가MySQL InnoDB 기반에서 FK 지정 시 index가 생성되어 별도의 외래키를 위한 index는 만들지 않았습니다.index를 추가했습니다.index를 지정했습니다.OOO% 방식의 와일드카드만 성능에 영향이 있을 것으로 판단됩니다.이부분은 실행계획을 작성해보는 경험을 하는 것을 과제를 진행했습니다.
실제로 index에 대한 개선된 부분을 도출하는 것에는 실패했습니다.