DB 에선 2진 검색 트리를 사용한다, 균형잡힌 트리등 각 DB 마다 다를 순 있다
어떤 게임에서 특정 유저 ABC 에게 귓말을 날린다 하면 다른 방법을 쓰지 않는다면 모든 유저중에서 ABC 를 찾아야 하지만 이때 index 를 사용하면 빠르다
유저명순으로 이름들을 정렬한 다음 여기에 index 를 매긴다
즉 트리종류의 검색으로 빠르게 찾는것이 index 의 방식이다
이때 유저명에다가 index 를 걸어 찾기를 더 빠르게 한다는 개념
INDEX 는 두가지 종류가 있다
- CLUSTERED INDEX : 테이블당 1개만 존재하고 제일 빠르다, 공간도 적게 차지함
Primary key 대부분이 clustered index 이다
영한사전 처럼 알파벳 순서처럼 이미 데이터가 정렬이 되어 있고 여기서 찾는 것 - NON-CLUSTERED INDEX : 별다른 제한 없음
별도의 공간에 색인목록을 만들어 색인 목록으로 한번 간다음 여기서 다시 데이터를 찾는 방식
즉 따로 관리하는 Lookup테이블로 색인을 먼저 한다음 찾는다
디폴트로는 Primary key 로 지정하면 Clustered Index 인데, 지정을 Non - Clustered Index 로 한다면 이것도 가능은 하지만 이렇게 사용할일은 거의 없다
인덱스 지정하기
CREATE INDEX i1 ON accounts(accountName);
인덱스를 accountname 에 지정한다음 위 그림처럼 i1 으로 accountname 에 대한 인덱스가 지정된 것을 알 수있다
DROP INDEX accounts.i1;
이렇게 인덱스를 삭제 할 수 있다
accountname 을 인덱스로 지정하는 상황은 이름으로 검색을 하는 경우를 예로 들 수 있다
CREATE UNIQUE INDEX i1 ON accounts(accountName);
--중복 되는 것이 없는 인덱스
CREATE CLUSTERED INDEX i1 ON accounts(accountName);
이렇게 지정하면 CLUSTERED 인덱스로 지정을 하려고 하지만 테이블에 하나만 클러스터 인덱스만 존재 함으로 추가로 지정하려 하면 오류가 난다
CREATE INDEX i1 ON accounts(accountName, ballCount);
이렇게 여러개를 조합하여 묶어 인덱스로 지정하는 것도 가능하다
'서버(Server) > DB' 카테고리의 다른 글
DB : INNER JOIN, CROSS JOIN (0) | 2023.02.16 |
---|---|
DB : UNION : 합치면서 중복제거, INTERSECT 교집합, EXCEPT 차집합 (0) | 2023.02.15 |
DB : DB(스키마) 만들기, 테이블 만들기와 Primary Key 의 성능 (0) | 2023.02.12 |
DB : SUBQUERY (0) | 2023.02.10 |
DB : subquery (0) | 2023.02.04 |