소개

[백엔드 기초] 시리즈는 SQLite을 활용하여 백엔드의 기초를 익히는 것을 목표로 합니다. 빠르고 직관적인 이해를 돕기 위해 전문적인 용어보다는 비유적인 표현을 많이 사용했습니다. 백엔드를 처음 배우는 분도 쉽게 배우고 따라하는 설명서가 되었으면 합니다.

본 시리즈가 다루는 주제는 크게 다음과 같습니다:

  • SQLite
  • RDBMS

다음과 같은 내용을 학습하시면 본 시리즈를 이해하는 데 도움이 됩니다:

  • (선수과목 없음)

         

Table of Contents


  1. Introduction
  2. SQL Index

         

SQL Index

SQL Index는 데이터 불러오기를 더 빠르게 실행할 수 있도록 특화된 Table입니다. 데이터베이스에 저장된 각 데이터의 포인터를 저장하기 때문에 데이터를 읽는 SELECT는 빠르게 수행할 수 있지만 데이터를 변경하는 UPDATEINSERT는 느리게 실행합니다.

Index는 생성해주면 따로 설정하지 않아도 SELECT같은 명령어를 수행할 때 자동으로 사용되어, Query를 더 빠르게 실행시켜줍니다.

 

Index 생성하기

Table과 비슷하게 CREATE INDEX를 입력하여 생성합니다. 기본적인 문법은 다음과 같습니다.

CREATE [UNIQUE] INDEX [IF NOT EXISTS] index_name
  ON table_name
    (column1 [ASC | DESC],
     column2 [ASC | DESC],
     ...
     column_n  [ASC | DESC])
  [ WHERE conditions ];

지난 포스트에서 만들었던 scholarship Table에 대한 scholarship_index Index를 생성해 봅시다.

CREATE INDEX gpa_index ON scholarship(gpa);

 

Index의 종류

Index의 종류는 다음과 같습니다:

  • Unique Index 중복된 값을 허락하지 않는 Index 입니다. Column에 중복된 값이 포함되어 있으면 에러가 나옵니다. 다음과 같이 생성합니다:
    CREATE UNIQUE INDEX name_index ON scholarship(name);
    
  • Single-Column Index 단 하나의 행에 대응하는 Index입니다.
    CREATE INDEX single_index ON scholarship(name);
    
  • Composite Index 두 개 이상의 행에 대응하는 Index입니다.
    CREATE INDEX comp_index ON scholarship(name, GPA);
    
  • Implicit Index 데이터베이스가 생성될 때 자동으로 생성되는 Index입니다. Primary Key나 Unique Constraint를 생성할 때 자동으로 저장됩니다.

 

SHOW로 Index 확인하기

Index가 잘 생성되었는 지는 SHOW INDEX를 통해 확인할 수 있습니다. 하나의 Table에서 생성된 모든 Index의 정보를 불러오는 방법입니다.

SHOW INDEX FROM scholarship;

SHOW는 MySQL에서 지원하는 명령어로, SQLite를 사용한다면 다음과 같은 코드를 실행시키면 됩니다:

PRAGMA index_list(scholarship);

결과:

seq  name                            unique  origin  partial
---  ------------------------------  ------  ------  -------
0    name_index                      1       c       0
1    gpa_index                       0       c       0
2    comp_index                      0       c       0
3    single_index                    0       c       0
4    sqlite_autoindex_scholarship_1  1       pk      0

 

언제 Index를 사용할까요?

Index는 데이터 접근이 빠른 대신 업데이트가 느리기 때문에 되도록 정적이고 큰 데이터베이스에 사용하기 적합합니다.

  • 작은 Table보다는 큰 Table에 적합합니다.
  • 자주 업데이트 되는 자료에는 적합하지 않습니다.
  • Null value가 많은 column에는 적합하지 않습니다.
  • 데이터를 모두 추가한 후에 생성해줍니다.

 

Index 삭제하기

더 이상 사용하지 않거나 변형이 많이 된 Table의 Index는 삭제해주는 것이 좋습니다.

DROP Index index_name ON table_name

주의: Primary Key나 Unique Constraint를 가진 Attribute로부터 생성된 Index는 삭제할 수 없습니다. 삭제를 원한다면 ALTER TABLE을 통해 테이블에서 Constraint 자체를 삭제해 줘야 합니다.

   


         

자료 출처