대용량 DB 10강 (인덱스 , 조인)
1. 추가된 인덱스가 미치는 영향
l SELECT *
FROM TAB1
WHERE A = ‘10’
AND B = ‘941005’
AND C = ‘123’
- IDX1 : AB , IDX2 : C 가 있다면, 결합인덱스인 IDX1를 탄다.
여기서, IDX1에 ABD로 변경하면 다른 부분에 영향을 미침
l 분포도 차이가 심한 경우
- 예를 들어, corp_id의 값이 삼성 SDS로 90%로 이루어져 있다면,
삼성 SDS는 값을 null로 가져가라. 그리고 아래의 쿼리로 변경.
SELECT nvl(corp_id , ‘100’) corp_id
FROM XX
WHERE :V1 = ‘100’
AND CORP_ID is null
UNION ALL
SELECT *
FROM XX
WHERE :V1 <> ‘100’
AND CORP_ID = :V1
è 이런식으로 구성을 하면 인덱스 사이즈가 확 줄어버리기 때문에 성능이 좋아짐
2. 비트맵 인덱스
l
l 특징
i. 분포도가 낮은 컬럼에 유효
ii. 전통적인 b-tree 인덱스의 단점을 해소 (or, not, null 등)
iii. I/O이 획기적인 감소
iv. 블락 레벨 Locking (Row 레벨이 아님)
v. DW에 적당함.
3. 조인 수행속도 결정요소
l 적은 건부터 드라이브 되는 것이 성능이 좋다. (조인의 순서 중요)
l 인덱스
i. 조인 컬럼이 둘다 인덱스가 없을 경우에 두개의 테이블 다 full table scan하고 sort merge 조인을 한다.
ii. 한 테이블의 컬럼만 인덱스가 있을 경우에는 인덱스가 없는 쪽이 먼저 드라이빙 된다.