본문 바로가기
프로그래밍/DB & Redis

index

by 뽀도 2017. 1. 4.



Index의 개념


- 인덱스는 데이터를 찾을 때 빨리 찾기 위해서 사용한다.

- 인덱스가 없다면 특정한 값을 찾기 위해 모든 데이터 페이지를 다 뒤져야 한다. 이것을 table scan이라고 한다. 인덱스가 찾고자 하는 컬럼이나 표현식에 대해 존재하지 않고, 인덱스를 사용하는 것이 더 효과적이라면 sql 서버는 모든 페이지를 뒤지지 않고 인덱스 페이지를 찾아서 쉽게 데이터를 가져온다.

이걸 index seek이라고 한다.


인덱스의 단점

- 만드는데 시간이 걸린다.

- 만드는데 많은 공간이 필요하고 만들고 난를  후에도 추가적인 공간이 필요하다.

- 데이터를 수정하는 시간, 특히 insert 작업은 오히려 더 많이 걸린다.


클러스터 인덱스

- 테이블 마다 한 개의 클러스터 인덱스가 존재한다.

- 물리적인 행의 순서가 인덱스의 순서와 동일하다

- 인덱스의 맨 마지막 단계인 리프 레벨이 곧 데이터 페이지 이다.

- 클러스터 인덱스는 실제 데이터의 순서와 인덱스의 순서가 일치하기 때문에 일정한 범위를 주고 찾는 경우 속도 향상에 도움이 된다. 또 넌 클러스터 색인에 비해 색인의 단계가 한 단계 적기 때문에 색인의 크기도 작고 그만큼 빨리 찾을 수 있다.

- 반면 새로운 데이터가 입력되면 항상 물리적 순서를 색인의 순서에 맞추어야 하기 때문에 많은 데이터가 자신의 자리를 찾는 작업을 해야 하므로 이부분에서는 오히려 넌 클러스터 인덱스보다 느리다.


넌클러스터인덱스

- 물리적인 행의 순서가 색인의 순서와 동일하지 않다.

- 리프 레벨은 데이터페이지가 아니다.

- 리프 레벨에서 한 단계 더 내려가야만 데이터 페이지이다.

- 따라서 클러스터 색인보다 한 단계를 더 거쳐야 실제 찾고자 하는 데이터에 도달할 수 있다.


출처ㅋ


http://beatz.tistory.com/entry/sql-%ED%8A%9C%EB%8B%9D-%EA%B0%80%EC%9D%B4%EB%93%9C-1-%EC%9D%B8%EB%8D%B1%EC%8A%A4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

반응형

'프로그래밍 > DB & Redis' 카테고리의 다른 글

[mysql] 이벤트 스케쥴 확인  (0) 2018.11.25
[mysql] 날짜 관련 쿼리.  (0) 2017.01.13
스키마  (0) 2016.12.15
shrinkfile  (0) 2016.08.22
sp_lock 확인과 처리 방법.  (0) 2016.08.08

댓글