티스토리 뷰

반응형

지난번에 인덱스에 대해

간단히 소개를 한 바 있다.

인덱스는

DB튜닝에 있어서 반드시 필요하며,

데이터베이트 관리자라면 반드시 알고 있어야 하는

중요한 개념이니만큼 기본을 탄탄히 해야한다.

이에 인덱스의 기본개념과 종류에 대해

나름대로의 경험을 토대로 지난번에 이어

간단히 정리해 보고자 한다.
지난번 포스팅에 인덱스가 무엇인가에 대해서 책에 비유해서 간단히 설명을 했다.
(일반적으로 인덱스를 설명할 때는 책과 많이 비교가 된다.)

그리고 인덱스를 사용함에 따라 검색속도의 향상을 가져올 수도 있고 아닐수도 있다고 했다.

그럼 어떤 경우에 인덱스를 사용해야하고, 사용하지 말아야 하는 것일까.

여러 데이터베이트 전문가들은 인덱스를 작성함에 있어 다음과 같이 권고하고 있다.

 where 절에서 자주 사용되는 컬럼
 자주 검색되는 컬럼(select 절에서)
 PK(기본키, 자동색인)
 FK(참조키, 자동으로 만들어지지 않음. join의 속도향상에 도움이 됨.)
 참조키가 아니더라도 join에 빈번하게 사용되는 컬럼
 order by절에 자주 사용되는 컬럼(클러스터 색인에 유리)
 일정범위를 주고 검색하는 경우(클러스터 색인에 유리)

그리고 다음은 일반적으로 인덱스를 사용하지 않는편이 좋다고 하는 경우이다.

 자주 사용되지 않는 컬럼
 질의 결과가 테이블스캔과 별 차이가 없을 경우
 데이터 중복도가 높은 컬럼
 검색속도보다 데이트 변경(insert, delete, update)가 성능에 더욱 영향을 줄 때.

이상으로 일반적으로 인덱스를 사용해야 하는 경우와 사용하지 말아야 할 경우에 대해 정리해 보았다.

물론 위에서 예를 든 사항들이 절대적이라는 얘기는 아니다.

그리고 인덱스를 사용함에 있어서 다음과 같은 사항을 고려해야 하기 때문에 무작정 인덱스를 생성해서도 안된다.

 인덱스 작성에 많은 시간이 걸리며 잠금이 발생하기도 한다. 때문에 인덱스 작성을 할때는 주의해야 한다.
 인덱스도 데이터와 마찬가지로 물리적 공간이 필요하며,
    데이터 수정에 따라서 추가적인 물리적 공간이 점점 늘어나게 된다.
 데이터 수정에 시간이 걸린다. 특히 insert의 경우 인덱스작성에 영향을 준다.

그렇게 때문에 인덱스를 생성하고 관리함에 있어서 기본이 되는 위 사항들을 꼭 이해를 하고 있어야 한다.

자주사용하고 있지않은 인덱스를 삭제한다던지

만들어놓은 클러스터형 인덱스가 혹시 성능에 더 안좋지는 않은지

비 클러스터형 인덱스를 설정하고 비효율적인 검색을 하고있지는 않은지

select와 insert,delete,update사이에서 고민을 한다던지

등등에 대한 튜닝을 결정을 해야 할 때가 반드시 올 것이다.

미리미리 공부하고 준비하도록 하자.





이전글 보기

2009/09/17 - [DB(MS, PG, MY..etc)] - SQL 이야기 - Index(색인)에 대해서







블로그코리아에 블UP하기
반응형
댓글
반응형
12-01 06:46
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함