bdfgdfg

[MSSQL] 인덱스(Index) 본문

CS/DB

[MSSQL] 인덱스(Index)

marmelo12 2022. 9. 29. 23:13
반응형

Index

인덱스란 테이블의 데이터를 조회할 때 더 빠르게 검색하기 위한 것.

 -> 다만 그 만큼 용량을 더 잡아먹는다.

 

인덱스가 걸리지 않는 테이블을 조회하는건 사실상 O(N). 선형탐색과 다를게없다.

O(N)이 느린건 아니지만, 많은 데이터를 저장하는 데이터베이스에서는 해당 검색시간은 많이 느린편에 속함.

 

인덱스는 이름그대로 색인. 책에서 목차를 먼저 찾고, 그 후 데이터를 조회하는 방식.

 

인덱스를 걸 대상은 고유한 값(고유한 값? -> 기본키)이여야한다.

인덱스는 책의 목차라고 했다. 예로들어 사진이라는 목차를 찾아갔는데 연관된 페이지가 100장 혹은 1000장을 넘어버리면 그게 무슨 의미가있을까.

 

즉 우리는 목차만 보고 그 목차와 연관된 실제 내가 찾고싶은 데이터를 빠르게 찾기 위해서 인덱스를 거는거다.

 -> 간단하게 말하면 WHERE절에 자주 조건이 들어갈 칼럼. 즉 고유한정보를 빠르게 찾기 위함

 

그럼 이 고유한 값을 가질 칼럼을 대상으로 인덱스를 걸어야하는데, 이는 Primary Key의 이념과 동일하게 된다.

그렇기에 보통 기본 키를 걸시 인덱스도 함께 딸려오는 것. (그렇다고 두 개념이 동일하다는건 아니다.)

 

Index의 종류 Clustered Index vs Non-Clustered Index

두 인덱스의 자세한 차이는 나중에 다시 설명하겠지만 정렬과 관계있다.

 -> 위에서 설명한 인덱스처럼 목차를 확인하고 해당 페이지로 이동과 같은 2단계를 거칠필요 없이 저장된 데이터를 대상으로 바로 검색을 한단 의미.

 

테이블의 칼럼을 대상으로 기본 키를 설정할 시 대부분 Clustered Index이다.

 -> 처음에 색인 관련된 Index는 Non-Clustered Index.

 

간단하게 테이블을 만들어보고 실습을 해보자.

CREATE TABLE Account
(
	AccountUID INT NOT NULL,
	AccountName VARCHAR(10) NOT NULL,
	CreateDate DateTime2,
	UpdateDate DateTime2
)

-- 두 개의 칼럼을 대상으로 하나의 기본 키(하나의 Clustered Index)를 생성. (복합키라고한다)
ALTER TABLE Account ADD CONSTRAINT Account_PK PRIMARY KEY (AccountUID, AccountName)

 

위 처럼 하나의 테이블에 여러 칼럼을 대상으로 키를 잡아야할때가 존재한다. (그 칼럼들이 모두 합쳐서 고유해야 할때라던지.)

반응형

'CS > DB' 카테고리의 다른 글

[MSSQL] 복합 인덱스  (0) 2022.10.17
[MSSQL] 트랜잭션(Transaction)  (0) 2022.10.06
Comments