본문 바로가기

개발/DB

[mssql] 인덱스 개념

반응형

인덱스 : 색인과 같은 개념

수억 건의 데이터에서 인덱스가 없이 전체 데이터를 스캔해서 찾는거는 sql server 입장에서 부담스러운 일이다.

 

 

 

인덱스가 없이 조회 실행 계획 - 테이블 스캔 (전체 테이블 검색) 

인덱스를 사용할 경우 실행 계획 - Index Seek (인덱스를 사용함)  

인덱스 장점 

- 검색 속도 향상된다. 튜닝 즉각적인 효과를 내는 방법

- 쿼리의 부하를 줄인다.

- 시스템 성능 향상 된다.

 

인덱스 단점

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

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

- 데이터의 변경 작업(insert, update, delete)이 자주 일어날 경우에는 오히려 성능이 많이 나빠질 수 있다.

 

실제로 데이터베이스에 인덱스를 생성해 놓아도, 인덱스를 사용하는 것이 빠를지 아니면 그냥 전체 테이블을 검색하는 것이 빠를지를 SQL Server 가 알아서 판단한다. 그렇더라도 쓸데 없는 인덱스를 만들어서 발생되는 문제점이 많이 있다.

 

인덱스 종류 

- 클러스터 Clustered index : ex 영어사전 / 레코드의 물리적 순서가 인덱스의 엔트리 순서와 일치하게 유지되도록 구성  = 자신의 열을 기준으로 데이터 정렬 / 테이블당 한 개만 생성 가능

- 비클러스터 NonClustered index : ex 색인 / 테이블당 여러개 생성 가능   

 

인덱스는 테이블의 열 단위로 생성이 된다.

열을 기본 키로 설정하면 자동으로 클러스터형 인덱스가 생성된다. (기본키는 테이블당 하나 = 클러스터형 인덱스 테이블당 하나 )

 

테이블 생성 시 인덱스를 만들러변 반드시 제약 조건을 사용해야 한다. 

인덱스가 만들어지는 제약 조건은 PRIMARY KEY 또는 UNIQUE 뿐이다.

 

비전공자를 위한 이해할 수 있는 IT 지식 

https://coupa.ng/b8Gdl3

 

비전공자를 위한 이해할 수 있는 IT 지식, 티더블유아이지

반응형