데이터베이스/C# + 유니티로 만드는 MMORPG 게임 개발 (2) - 데이터베이스

SQL (12) - INDEX

monstro 2025. 2. 17. 12:29
728x90
반응형

이번 포스트에서는 데이터 베이스의 INDEX 개념에 대해 알아보겠습니다.

INDEX책에서 사용하는 색인의 개념으로서 데이터 테이블의 무수히 많은 데이터들 중에서

특정한 데이터를 검색하고자 하는 경우사용합니다.

 

INDEX의 경우 모든 상황에 보편적으로 사용하기 보다는

찾고자 하는 열에서 데이터의 종류가 많으면 겹치는 경우가 적어 최적의 효율을 볼 수 있습니다.

 

1) INDEX의 분류

INDEX는 크게 2가지로 분류할 수 있습니다.

  • Clustered INDEX : 실제 데이터가 정렬된 상태 저장됨 (물리적인 데이터 저장 순서의 기준) 
  • Non-Clustered INDEX : 데이터 테이블에 속하지 않고 외부에서 관리하는 일종의 LOOK UP 테이블

가장 흔하게 접할 수 있는 INDEX 중 하나Primary Key는 

대부분 Clustered INDEX이며, 테이블 당 1개만 존재하고 제일 좋고 빠른 INDEX입니다.

 

2) SQL을 통한 INDEX 설정

이전에 만든 GameDB 데이터 테이블을 사용하여 INDEX를 사용해보도록 하겠습니다.

 

2 - 1) 기본키 추가

-- 기본키를 추가
ALTER TABLE accounts
ADD CONSTRAINT PK_Account PRIMARY KEY (accountId)

 

위 쿼리의 실행결과는 다음과 같습니다.

 

2 - 2) 기본키가 아닌 클러스터형 인덱스 추가

-- accounts 테이블 내 accountName 열에 i1이라는 Index를 추가,
-- 따로 명시하지 않으면 기본적으로 클러스터형 인덱스를 추가(테이블에 하나만 존재)
CREATE INDEX i1 ON accounts(accountName);

 

위 쿼리의 실행 결과는 다음과 같습니다.

 

2 - 3) 특수 성질을 가진 클러스터형 인덱스 추가

-- 인덱스를 추가할 때, 특수한 설정을 부여
-- i2 인덱스의 경우, 고유값을 갖게 됨
CREATE UNIQUE INDEX i2 ON accounts(accountName);

 

위 쿼리의 실행 결과는 다음과 같습니다.

 

2 - 4) 인덱스를 제거

--인덱스를 제거
DROP INDEX accounts.i1;
DROP INDEX accounts.i2;

 

위 쿼리의 실행 결과는 다음과 같습니다.

728x90
반응형

'데이터베이스 > C# + 유니티로 만드는 MMORPG 게임 개발 (2) - 데이터베이스' 카테고리의 다른 글

SQL (14) - JOIN  (0) 2025.02.17
SQL (13) - 집합 연산자  (0) 2025.02.17
SQL (11) - 정규화  (0) 2025.02.12
SQL (10) - DDL  (0) 2025.02.12
SQL (9) - SUBQUERY  (0) 2025.02.12