인덱스의 개념

인덱스의 개념을 설명할 때 가장 쉬운 것은 책의 예를 드는 것이다. 

책 내용을 찾을 때 책의 첫 장부터 찾을 수도 있지만, 책의 제일 뒤에 있는 찾아보기를 보고 가나다순으로 정렬된 내용 중에 원하는 내용을 찾아서 옆에 붙어있는 페이지 번호를 찾아서 내용을 확인할 수도 있다, 하지만 찾아보기가 없는 책도 있을 수 있다. 

인덱스는 데이터를 좀 더 빠르게 찾을 수 있게 해주는 도구이다. 


인덱스의 문제점

인덱스도 단점이 분명히 있다. 그래서 인덱스를 효율적으로 사용하는것이 간단한 일은 아니다.

책을 다시 예로 들으면 데이터베이스 이론 책의 찾아보기에는 데이터베이스라는 단어 옆에 페이지 번호는 수백 또는 수천개가 연속해서 나오게 될 것이다.

찾아보기란 책의 두게보다 당연히 적어야 정상인데, 이경우 오히려 찾아보기가 책의 페이지만큼 나오거나 오히려 책의 내용보다 더 두꺼워질 수 있다.


인덱스를 만들어서 발생되는 장점과 단점

  * 장점

    : 검색은 속도가 무척 빨라질 수 있다(단, 항상 그런것은 아니다.)

    : 그 결과 해당 쿼리의 부하가 줄어들어서, 결국 시스템 전체의 성능이 향상된다.

  * 단점

    : 인덱스가 데이터베이스 공간을 차지해서 추가적인 공간이 필요해 지는데, 대략 데이터 베이스 크기의 10%정도의 추가 공간이 필요하다.

    : 처음 인덱스를 생성하는데 시간이 많이 소요될 수 있다.

    : 데이터의 변경 작업(Inscrt, Update, Delect)이 자주 일어날 경우에는 오히려 성능이 많이 나빠질 수도 있다.


결국 인덱스는 잘 사용하면 검색의 속도가 월등히 향상되고, 시스템의 성능이 좋아지는 반면 잘못 사용하게 되면 오히려 사용하지 않는 것보다 더 나쁜 결과를 초래할 수 있다.


인덱스의 종류

  * 클러스터형 인덱스(Clustered Index)

    : 클러스터형 인덱스는 영어 사전처럼, 책의 내용 자체가 순서대로 정렬이 되어 있어서 인덱스 자체가 책의 내용과 같음

    : 영어 사전과 같은 책

    : 테이블당 한 개만 생성할 수 있다.

    : Primary Key, Unique

  * 비클러스터형 인덱스(Nonclustered Index)

    : 비클러스터형 인덱스는 "찾아 보기"가 별 도로 있고, "찾아보기"를 찾은 후에 그옆에 표시된 페이지로 가야 실제 찾는 내용이 있음.

    : 책 뒤에 "찾아 보기"가 있는 일반 책

    : 테이블당 여러 개 생성할 수 있다.


인덱스의 내부 동작

트리 자료구조

B-Tree(Balanced Tree, 균형 트리)


- 인덱스를 생성해야 하는 경우와 그렇지 않은 경우

  * 인덱스는 열단위에 생성된다.

  * Where 절에서 사용되는 열에 인덱스를 만들어야 한다.

  * Where 절에 사용되더라도 자주 사용해야 가치가 있다.

  * 데이터의 중복도가 높은 열은 인덱스를 만들어도 별 효용이 없다.

  * 외래키가 사용되는 열에는 인덱스를 되도록 생성해 주는 것이 좋다.

  * Join에 자주 사용되는 열에는 인덱스를 생성해주는 것이 좋다.

  * Insert, Update, Delete가 얼마나 자주 일어나는지를 고려해야 한다.

  * 클러스터형 인덱스는 테이블당 하나만 생성할 수 있다.

  * 사용하지 않는 인덱스는 제거하자


페이지 스플릿

반응형

'Programming > Database' 카테고리의 다른 글

SQL Join 사용해보기  (0) 2017.06.15
SQL Update 사용해보기  (0) 2017.06.14
SQL Insert, Delete 사용해보기  (0) 2017.06.08
테이블 만들기 및 SQL Select 사용 해보기  (0) 2017.06.08
트랜잭션의 개념  (0) 2017.06.01
DB 공부하기  (0) 2017.05.25
데이터 베이스  (0) 2015.08.16