본문 바로가기

데이터베이스

(10)
Hash Join - join 조건을 hash값으로 만들어 join 하는 방식 - 대용량 처리 시 성능에 영향을 주는 random access와 sorting에 대한 해결책으로 등장 - equal join에서만 수행 가능(Hash값이 크다고 실제 값이 크지는 않음) - 작은 table과 큰 table의 join에서 사용하면 성능에 좋음 - 작은 table을 driving table(build input)으로 잡아야 함 - 다른 join방법보다 CPU자원을 많이 사용(Hash Area 등) - 병렬 처리를 이용한 Hash Join은 대용량 데이터 처리를 위한 최적의 방법을 제공
Sort Merge Join - join 되는 table을 각각 엑세스하여 sort한 결과를 차례로 scan하면서 merge를 수행 - sorting 된 집합을 scan하면서 merge를 하기 때문에 join 자체는 빠르지만, sort 작업에 대한 부담이 큼 - 비동등 join(. like 등)이 가능함 - 충분한 메모리 활용이 가능하고, 병렬처리를 통해 빠르게 정렬할 수 있다면 대량의 데이터 조인에 유용하게 적용 가능
Nested Loop Join - outer table(driving table)의 데이터를 읽어 inner table의 데이터와 1건씩 join 하는 방법 - outer table의 결정과 처리 범위에 따라 성능이 결정 됨 - Inner table에 join 조건에 인덱스가 없으면 outer table에서 추출 된 건수 만큼 table full scan을 타게 됨 - OLTP 환경에서 주로 사용(부분 범위 처리) - 아래와 같은 매커니즘(2중 for문)으로 동작한다고 이해하면 된다 for (int i = 0; i < outer.length; i++){ -- outer loop for (int j = 0; j < inner.length; j++){ -- inner loop ..... } }
반정규화(역정규화) 1. 테이블 반정규화 분류 기법 내용 테이블 병합 1:1 관계 테이블 병합 1:1 관계를 통합 1:M 관계 테이블 병합 1:M 관계를 통합 슈퍼/서브타입 테이블 병합 슈퍼/서브타입 관계를 통합 테이블 분할 수직 분할 컬럼 단위로 분할 수평 분할 로우 단위로 분할 테이블 추가 중복 테이블 추가 다른 업무이거나 서버가 다른 경우 동일한 테이블 구조를 중복하여 생성 통계 테이블 추가 SUM, AVG 등을 미리 계산해 둔 테이블을 추가 이력 테이블 추가 마스터 테이블에 존재하는 레코드를 시간, 트랜잭션 발생 시점에 따라 복사해 두는 테이블을 추가 부분 테이블 추가 수평 분할이란 동일한 개념 2. 컬럼 반정규화 기법 내용 중복 컬럼 추가 조인에 의한 성능 저하를 예방하기 위해 중복 된 컬럼을 위치 시킴 파생 컬럼..
쿼리 실행 계획 1. 실행 계획 확인 하는 법 - 쿼리 앞에 explain을 붙여 줌 2. 실행 계획 각 항목이 의미하는 내용 구분 설명 ID Select 아이디로 Select를 구분하는 번호 Select_type Select에 대한 타입 Table 참조하는 테이블 Type 조인 혹은 조회 타입 Possible_Keys 데이터를 조회할 때 DB에서 사용할 수 있는 인덱스 리스트 Key 실제로 사용할 인덱스 Key_len 실제로 사용할 인덱스의 길이 Ref Key 안의 인덱스와 비교하는 칼럼(상수) Rows 쿼리 실행 시 조사하는 행 수 Extra 추가 정보 3. Select_type 구분 설명 SIMPLE UNION이나 서브쿼리가 없는 단순 SELECT PRIMARY 서브쿼리가 있을 때 가장 바깥쪽에 있는 SELECT ..
MySQL 특징 1. 주요 스토리지 엔진의 특징 MyISAM InnoDB Archive 스토리지 제한 256TB 64TB None 트랜잭션 No Yes No Locking 레벨 Table Row Row 인덱스 B-Tree B-Tree No Cache Index Data/Index No 파티셔닝 Yes Yes Yes Cluster Index No Yes No Foreign Key No Yes No MyISAM 1. MySQL에서 가장 오래된 스토리지 엔진 2. 파일 기반 스토리지 엔진이며 데이터에 대한 키(인덱스)만 메모리에 올려서 처리 3. 트랜잭션을 지원하지 않고 Table Level Lock으로 데이터 변경을 처리 4. Fulltext Indexing(텍스트 전문을 검색), Geometric Spatial Index..
BCNF(Boyce-Codd NF) BCNF(Boyce-Codd NF) BCNF는 원래 제3정규형의 간단한 형태로 제안되었으나 나중에 제3정규형보다 더 엄격한 것으로 밝혀졌다. 즉, 모든 BCNF 릴레이션은 제3정규형이지만 제3정규형 릴레이션은 반드시 BCNF는 아니라는 것을 의미한다. 제3정규형보다 더 강력한 정규형이 필요한 이유는 아래의 테이블을 보면 나타난다. student course instructor S1 데이터베이스 P1 S2 데이터베이스 P2 S2 수학 P3 S3 데이터베이스 P1 위의 테이블은 도메인 종속성, 부분 함수적 종속성, 이행 함수적 종속성을 모두 만족 하므로 제3정규형이지만, BCNF는 아니다. 문제점을 살펴보면 1. 삽입 이상 : 새로 온 교수(instructor) P4가 알고리즘을 담당한다고 가정하면, 삽입을..
제3정규형(3NF) 제3정규형(3NF) 제3정규형은 이행적 종속성의 개념에 기반을 둔다. 릴레이션 스키마 R에서 후보키가 아니고 어떤 키의 부분집합도 아닌 컬럼들의 집합 Z가 존재하여 X -> Z와 Z -> Y가 만족될 때, 함수적 종속성 X -> Y를 이행적 종속성이라 부른다. ssn ename bdate deptno deptnm 120101-1234567 홍길동 12-01-01 00001 정규화개발실 위와 같은 테이블이 있다고 가정하면, ssn -> deptno와 deptno -> deptnm이 성립하고 deptno가 테이블의 후보키나 키의 부분집합이 아니기 때문에, 종속성 ssn -> deptnm은 deptno를 통해 이행적이다. 이 테이블에 제3정규형을 적용하면 아래와 같이 나타나게 된다. ssn ename bdat..