[DB_Tuning]INDEX 설정 방법

2011. 9. 1. 14:46개발관련기록/SQL Server

반응형

DB 인덱스 설계

 

물리 데이터베이스 설계에서 가장 중요한 고려사항은 데이터베이스 성능 향샹이다.

데이터 모델에 반정규화를 적용하고 저장 방식을 통하여 성능향상을 꾀할 수 있지만,

데이터베이스 성능에 가장 영향을 주는 요인은 각 테이블에 걸려있는 인덱스이다.

 

인덱스(Index)란 테이블의 row를 식별할 수 있도록 컬럼값과 그 값을 포함하는 row의 논리적인 주소를 별도의 저장 구조를 만들어 저장하는 것이다.

인덱스를 이용하여 테이블에 존재하는 데이터 검색 속도를 빠르게 한다.

 

프로젝트를 진행하면서 데이터베이스, 데이터의 내용, 프로세스의 내용이 변하기 때문에

설계 단계에서 모든 인덱스를 정의하는 것은 불가능 하다.

 

설계 단계에서는 PK와 FK 및 테이블에 접근하는 방법이 분명하게 드러나는 컬럼에 대해서

기본적인 인덱스를 지정하고,

 

개발 단계에서 작정되는 SQL 문장 구조를 검토하여 반복적으로 인덱스 설계를 진행해야 함.

 

데이터는 지속적으로 증가하고 변형되기 때문에 각 상황에 적합하게 인덱스를 이용할 수 있도록

지속적으로 모니터링하여 조정해야 함.

 

인덱스 대상 선정

1. 대상 테이블 선정

 - 인덱스가 필요하다고 판단하는 기준은 DBMS가 테이블을 읽어들일 때 수행하는

MULTI BLOCK READ 수에 의해 판단한다.

 대략 64K 이내의 테이블 크기면 인덱스를 지정하지 않아도 된다.

테이블이 다른 테이블에 의해 참조되는 관계거나 조인에 의해 처리되어야 하는 경우는 인덱스를 생성해 주어야 한다. (그렇지 않을 경우, Full Scan이 발생할 수 있음)

 

 

2. PK 컬럼 인덱스

 - PK 컬럼은 반드시 인덱스를 사용하도록 설계한다.

 

 

3. 인덱스 대상 컬럼 선정

 - 테이블 내에서 자주 이용되며 분포도가 좋은 컬럼, 즉 평균 분포도가 10 ~ 15% 정도의 컬럼은 인덱스 지정 대상 컬럼이 된다.

  

     분포도(%) = 데이터별 평균 로우 수 / 테이블의 총 로우 수 * 100

 

 - 컬럼이 테이블 내에서 자주 사용된다는 의미는 SQL 문장의 조인에서 이용되거나 ORDER BY, GROUP BY, UNION, DISTINCT에서 이용되는 컬럼이다.

 

 

4. 인덱스 효율 검토

 - 인덱스 컬럼은 가능하면 수정이 자주 발생되지 않는 컬럼을 선정

 - 데이터의 입력, 수정, 삭제가 많이 발생하면 데이터 영영뿐만 아니라 인덱스에 있는 정보도 DBMS에서 수정해야 하므로 데이터 영역에 대해서만 프로세싱이 발생할때보다 시간과 자원이 더 소모됨

 - 인덱스는 데이터를 조회하여 처리하기에 좋은 성능을 가지지만 데이터 수정이 발생한 경우는 오히려 성능이 저하될 수 있고, 디스크 용량도 많이 차지하기 때문 임

 - 평균 분포도가 10~ 15%이내의 양호한 분포도를 가졌더라도 분포가 기형적이면 인덱스를 설정하지 않는 것이 낫다.

[출처] DB 인덱스(Index) 설계 |작성자 whitefre

반응형