DB

    JPA 관련 주의 사항 정리

    👉 Fetch Join의 한계페치 조인을 쓰면 연관된 전체 데이터를 다 가져와야 한다!만약에 조건에 만족하는 연관된 데이터만 가져올 경우 Collection에 전체 데이터가 담기지 않고 선택된 데이터만 담긴 다음 영속화 되어버린다. 이 때 다른 곳에서 해당 Collection을 호출 할 경우 정상적으로 데이터를 반환하지 못하게 된다. JPA의 Fetch Join 목적 자체는 전체 데이터를 가져오려고 설계 된 것임을 유의하자. 둘 이상의 Collection을 Fetch Join 하면 안된다!데이터가 뻥튀기 된다. 곱하기 곱하기가 되어서 데이터가 예상치 못하게 늘어날 수 있다. Collection을 Fetch Join하면 페이지 기능을 사용할 수 없다.일대일, 다대일은 페이징을 쓸 수 있다. (데이터 뻥튀기..

    마이페이지 쿼리 성능 점검

    더미데이터 삽입 목적데이터 용량이 만 단위를 넘어서게 되면 쿼리의 성능이 어떻게 나오는지 파악하고, 만약 성능이 안좋다면 이를 개선하기 위함. 마이페이지 관련 테이블 정보 총 3가지 테이블member (회원 정보)sbd (회원의 운동 수행 능력 정보, 3대 운동 중량)member_gym (회원이 등록한 헬스장 정보 - 최대 2개 까지 가능) member와 sbd는 일대다 관계 member와 member_gym도 일대다 관계 memer_gym과 sbd는 무슨 차이가 있는가?member_gym은 한 회원당 2개까지만 생성 가능, 만약 추가 생성을 한다면 이전에 생성된 테이블은 소프트 삭제 처리sbd는 한 회원당 무한으로 생성 가능, 마이페이지 조회 시에 최신 sbd 정보만 조회 마이페이지 관련 더미데이터 삽..

    DB 인덱스 실습

    여태 까지 이론적으로 알고 있던 인덱스의 종류 (단일, 복합, 커버링) 인덱스에 대하여 직접 설정을 해보고 그 효과에 대하여 실습을 해보려고 합니다. Table 구조 구조를 조금 단순화 하기 위하여 Member Table에서 PK에 해당하는 member_id와 회원이 거주하는 도시 city 그리고 상세 거주 지역 관련 정보 location, 마지막으로 회원의 이름 name등 4가지 칼럼을 생성하고 이에 대해 각각 인덱스를 거는 방식을 달리 함에 따라 실습을 진행할 에정입니다. 데이터 생성 CREATE DEFINER=`performance`@`%` PROCEDURE `insertMembers`() BEGIN DECLARE i INT DEFAULT 1; DECLARE j INT DEFAULT 1; DECLA..

    옵티마이저란?

    DBMS 옵티마이저란? DBMS에는 개발자가 작성한 SQL을 어떻게 실행할 것인지 실행 계획을 수립하고 SQL을 실행하게 됩니다. 옵티마이저는 이러한 실행 계획을 세워주는 역할을 수행합니다. 옵티마이저를 한 문장으로 정의하자면, SQL을 가장 빠르고 효율적으로 수행할 최적의 경로를 생성해주는 DBMS 내부 엔진입니다. 옵티마이저의 SQL 최적화 과정은 다음과 같은 순서로 이루어집니다. - 사용자가 작성한 쿼리 수행을 위해 후보군이 될만한 실행계획을 찾는다 - 데이터 딕셔너리에 미리 수집해 놓은 오브젝트 통계 및 시스템 통계정보를 이용하여 실행계획의 예상비용을 산정한다. - 각 실행계획을 비교하여 최저 비용을 갖는 하나를 선택한다. 옵티마이저의 종류 옵티마이저의 종류에는 크게 2가지가 있습니다. 규칙기반 ..