bdfgdfg
[MSSQL] 인덱스(Index) 본문
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 |