- 일반적으로 인덱싱은 검색을 최적화하기 위해 초기 데이터 저장 시에 이루어진다.
- 데이터를 저장할 때 인덱스가 자동으로 생성되며, 이후에는 검색이 빨라질 수 있도록 도와준다.
- CREATE INDEX구문을 사용하거나, 컬럼에 인덱스를 설정하면, 해당 컬럼에 대한 인덱스가 자동으로 생성된다. 이후, 데이터베이스가 새로운 데이터를 넣을 때 자동으로 해당 컬럼에 대한 인덱스도 갱신된다.
예시코드
CREATE INDEX idx_username ON users(username);
- 테이블에서 pk를 자동으로 증가시킬 때 쓰는 AutoIncrement와 다르게, 컬럼에 따로 추가되는 구조이다.
- 만약 위의 예시와 같이 name 컬럼에 대한 검색이 자주 일어날 것 같다면, 해당 컬럼에 대한 추가적인 인덱스를 생성해야 한다.
- 즉 특정 컬럼의 검색 최적화를 위해 추가적인 인덱슬르 생성하는 것이다.
ElasticSearch 나 Solar 같은 검색 엔진은 데이터를 처음 저장할 때 텍스트 기반의 역 인덱스를 생성해 놓는다.
- 이 역 인덱스를 통해 검색이 빠르게 일어난다.
DB에 수정 작업이 일어난다면, 기존 데이터가 그대로 사라지는 것이 아니라 기존 인덱스도 이에 맞춰 자동으로 갱신된다.
대부분의 경우는 인덱스가 즉시 갱신되지만, 크기가 큰 시스템에서는 데이터를 즉시 갱신하는 데 부하가 있을 수 있기 때문에 일정 시간이 지난 후 (배치) 인덱스를 갱신할 수 도 있다.
- ElasticSearch의 경우 데이터를 실시간으로 인덱싱하거나, 일정 주기마다 데이터를 모아 인덱싱하는 방식으로 설정할 수 있다.
검색 시에 인덱싱이 되는 것이 아니다.
인덱싱은 데이터를 저장하는 과정에서 한 번만 이루어지며, 그 이후 검색은 그 인덱스에 저장된 정보를 참조하게 된다.
즉, 검색 시에는 이미 만들어 놓은 인덱스를 기반으로 결과를 빠르기 찾기 때문에 검색 속도가 매우 빨라진다.