SQLite | 인덱스(Index) | 인덱스 생성

SQLite에서 인덱스를 생성하는 방법과 생성된 색인 목록을 표시하는 방법에 대해 설명한다.

CREATE INDEX 문을 사용하여 인덱스 생성

SQLite에서 인덱스를 만들 때는 다음 형식을 사용한다.

CREATE INDEX 인덱스명 ON 테이블명 (컬럼명 1, 컬럼명 2, ...);

인덱스는 테이블에 있는 컬럼을 대상으로 생성한다. 단일 컬럼에 인덱스를 만들 수 있고, 여러 컬럼을 조합하여 인덱스를 만들 수도 있다.

그러면 실제로 인덱스를 생성해 보자. 먼저 다음과 같이 테이블을 만든다.

create table user (name text, old integer, address text);
sqlite> create table user (name text, old integer, address text);
sqlite> 

테이블에 데이터를 추가한다.

insert into user values ('devkuma', 28, 'Seoul');
insert into user values ('kimkc', 22, 'Busan');
insert into user values ('araikuma', 32, 'Seoul');
insert into user values ('happykuma', 23, 'Seoul');
insert into user values ('mykuma', 23, 'Daejeon');
sqlite> insert into user values ('devkuma', 28, 'Seoul');
sqlite> insert into user values ('kimkc', 22, 'Busan');
sqlite> insert into user values ('araikuma', 32, 'Seoul');
sqlite> insert into user values ('happykuma', 23, 'Seoul');
sqlite> insert into user values ('devkuma', 23, 'Daejeon');
sqlite> 

그러면 생성한 테이블에 name 컬럼을 대상으로 한 인덱스를 만들어 보자. 여기서는 인덱스명을 nameindex으로 해서 다음과 같이 실행한다.

create index nameindex on user (name);
sqlite> create index nameindex on user (name);
sqlite> 

이것으로 인덱스가 생성이 완료되었다.

인덱스를 이용한 데이터 검색

인덱스를 생성해두면 데이터를 검색할 때 빨라지는 경우도 있지만, 인덱스 생성된 경우와 생성되지 않은 경우에 데이터의 검색 방법에는 차이가 없다. 테이블에 대해 검색을 수행할 때, 인덱스가 생성되면 자동으로 인덱스를 이용하여 검색이 이루어진다.

예를 들어, 인덱스 생성된 테이블에 name 컬럼을 대상으로 한 조건을 설정하고 데이터를 검색하려면 다음과 같다.

select * from user where name = 'devkuma';
sqlite> select * from user where name = 'devkuma';
devkuma|28|Seoul

이렇게 인덱스가 생성되었는지 아닌지를 의식할 필요가 없다.

데이터베이스에서 생성된 파일 목록

데이터베이스에서 생성되는 인덱스 목록을 확인하려면 SQLite 명령 .indices을 사용한다.

.indices
.indices? TABLE?

인수를 생략하는 경우에는 생성된 인덱스 목록을 표시한다. 인수에 테이블 이름을 지정한 경우에는 지정한 값과 일치하는 테이블을 대상으로 한 인덱스의 목록을 표시한다.

그럼 실제로 목록을 표시해 보자.

.indices
sqlite> .indices
nameindex
sqlite>

이 페이지에서 만든 인덱스가 표시되었다.

sqlite> .indices user
nameindex
sqlite>

위에 명령어으로는 user테이블을 대상으로 한 nameindex가 표시되었다.