인덱스 : 색인과 같은 개념
수억 건의 데이터에서 인덱스가 없이 전체 데이터를 스캔해서 찾는거는 sql server 입장에서 부담스러운 일이다.
인덱스가 없이 조회 실행 계획 - 테이블 스캔 (전체 테이블 검색)
인덱스를 사용할 경우 실행 계획 - Index Seek (인덱스를 사용함)
인덱스 장점
- 검색 속도 향상된다. 튜닝 즉각적인 효과를 내는 방법
- 쿼리의 부하를 줄인다.
- 시스템 성능 향상 된다.
인덱스 단점
- 인덱스가 데이터베이스 공간을 차지해서 데이터베이스 크기의 10% 정도의 추가 공간이 필요하다.
- 처음 인덱스를 생성하는 데 시간이 많이 소요될 수 있다.
- 데이터의 변경 작업(insert, update, delete)이 자주 일어날 경우에는 오히려 성능이 많이 나빠질 수 있다.
실제로 데이터베이스에 인덱스를 생성해 놓아도, 인덱스를 사용하는 것이 빠를지 아니면 그냥 전체 테이블을 검색하는 것이 빠를지를 SQL Server 가 알아서 판단한다. 그렇더라도 쓸데 없는 인덱스를 만들어서 발생되는 문제점이 많이 있다.
인덱스 종류
- 클러스터 Clustered index : ex 영어사전 / 레코드의 물리적 순서가 인덱스의 엔트리 순서와 일치하게 유지되도록 구성 = 자신의 열을 기준으로 데이터 정렬 / 테이블당 한 개만 생성 가능
- 비클러스터 NonClustered index : ex 색인 / 테이블당 여러개 생성 가능
인덱스는 테이블의 열 단위로 생성이 된다.
열을 기본 키로 설정하면 자동으로 클러스터형 인덱스가 생성된다. (기본키는 테이블당 하나 = 클러스터형 인덱스 테이블당 하나 )
테이블 생성 시 인덱스를 만들러변 반드시 제약 조건을 사용해야 한다.
인덱스가 만들어지는 제약 조건은 PRIMARY KEY 또는 UNIQUE 뿐이다.
비전공자를 위한 이해할 수 있는 IT 지식
'개발 > DB' 카테고리의 다른 글
[mssql] 문자 데이터 형식 char, varchar, nchar, nvarchar 차이점 (0) | 2019.03.23 |
---|---|
[mssql] 테이블 복제 쉽게 하기 SELECT.. INTO .. (0) | 2019.03.23 |
[mssql] 값 자동 증가 identity, 시퀀스(sequence) 생성과 사용법 (0) | 2019.03.23 |
[mssql] WITH 절 , 비재귀적 CTE (1) | 2019.03.16 |
[mssql] ROLLUP() 그룹별 합계 구하기, GROUPING_ID() 사용법 (0) | 2019.03.16 |