본문 바로가기
컴퓨터/Oracle

[Oracle]Index 오라클 인덱스 설계시 주의사항

by TEATO 2014. 7. 22.
반응형

[Oracle]Index 오라클 인덱스 설계시 주의사항


검색을 빠르게 도와주는 인덱스, 하지만 잘못알고 사용하면

오히려 독이 될 수도 있습니다. 오라클 인덱스 설계시 주의사항을 알아보겠습니다.



설계시 주의사항


1. 조건을 만족하는 데이터 분포가 10% 미만일때 생성하는것이 좋은성능을 낼 수 있다.

딱 10%라고 정해져 있지는 않지만 통상적으로 10%미만일때 인덱스가 효과를 발휘할 수 있고

10%가 넘어가면 점점 그 효과는 미미해진다고합니다.

예를 들어 1000페이지가 있는 책에서의 목차는 효과가 좋지만 

10페이지가 있는 책에서의 목차는 그다치 쓸모가 없죠.


2. 대용량테이블에 적용하는것이 좋다.

정확하진 않지만 약 20만~30만건이하의 데이터가 있는 테이블은 풀테이블 스캔을 하더라도 빠르게

검색이 됩니다.(parallel과 multiblock i/o기능으로 좀 더 빠르게 할 수 있죠)

 하지만 그이상의 데이터가 있는곳에서는 풀테이블스캔이 점점 성능이 떨어지겠죠.

테이블에 데이터가 30만건이상이 된다면 인덱스를 설계해주는것이 좋습니다.


3. 분포도가 나쁘더라도 fast index scan이 가능하다면 생성해도좋다.

fast index scan은 테이블 억세스를 하지않고 인덱스만읽어서 처리가 가능할때

사용할 수 있는 스캔방식입니다. 아무래도 테이블 전체를 조회하는것보다 인덱스만

조회해서 검색이 가능하다면 더 빠르게 검색할 수 있겠죠.


4. 적합한 인덱스를 택해서 생성해야한다.

때에 맞게 인덱스를 잘 생성하는것이 중요하죠.

인덱스에 필요한 칼럼이 들어가지않으면 성능이 떨이지기 마련이고

너무많은 칼럼을 넣어도 문제가 되기때문에 검색에 필요한 칼럼만 잘 넣어주는것,

그리고 결합인덱스를 구성할때 그 순서를 검색패턴을 고려하는것이 중요합니다.


5. 인덱스가 생성되는 테이블스페이스에 대해 충분한 고려필요.

인덱스와 테이블을 한 테이블스페이스에 놓을경우 사용자가 많을때 문제가 발생할 수 있습니다.

데이터를 검색할때 인덱스를 사용한다면 인덱스를 읽고 그것을 바탕으로 테이블을 읽는, 2번의 과정이

필요합니다. 때문에 한 테이블스페이스에 놓는다면 사용자가 많을때 부하가 걸리겠죠.

인덱스와 테이블을 다른 테이블스페이스에 배치해놓음으로써 그 부하를 줄일 수 있습니다.




결합인덱스 구성시 주의사항


결합인덱스를 구성할때는 선행칼럼을 어떤것으로 놓느냐가 매우 중요합니다.



결합인덱스가 구성되어있는 것을 확인해보면 col1이 먼저 정렬이 쭉 되어있고

col1을 기준으로 col2가 정렬이 되어있습니다.

때문에 인덱스를 col1 + col2 로구성했는데 검색할때 col2만을 range scan해야한다면

차례대로 검색이 되지않고 skip scan을 해야겠죠??


결합인덱스 구성시 선행칼럼 고려사항

1. where절에 자주 검색되는것

2. 분포도가 좋은것

3. 데이터양이 적은것

4. 범위검색으로 검색되지않는 칼럼



인덱스를 못쓰는경우

인덱스를 만들었다고해도 사용하지 못하는 경우가 있습니다.


1. 인덱스만든칼럼을 부정문으로사용한 경우

2. 인덱스만든칼럼을 함수로 변형하는경우

3. is null, is not null비교

4. 앞에와일드카드쓸때


sqlp책을 보셔도 이점은 자세히 나와있는데요

인덱스를 만든 칼럼을 변형하면 인덱스를 사용할 수가 없어요.

이와 관련된 다양한 예시는 책을 참고해주세요..*





반응형

댓글