검색을 위해 임의의 규칙대로 부여된 임의의 대상을 가리키는 무언가.
데이터베이스에서 검색 속도를 향상시키기 위해 사용되는 데이터 구조. 책의 색인처럼 특정 열(column)의 값을 기반으로 데이터를 빠르게 찾을 수 있도록 돕는다.
예를 들어 2학년 3반 21번을 하면 누군가를 특정할 수 있고, 주민번호도 마찬가지다.
이처럼 인덱스는 어려운 개념이 아니라 어떤 무언가를 찾기 위한 키의 개념으로 생각할 수 있다.
데이터베이스는 내가 원하는 데이터를 어떻게 찾아오는 걸까?
왜 데이터가 많아질수록 점점 느려질까?
왜 조인만 수행하면 느리지? 왜 쿼리가 느릴까?
이 의문들에 대해서 인덱스만 잘 안다면 이 문제의 많은 부분들을 해결할 수 있게 될 것이다.
인덱스의 종류는 두가지가 있는데 아주 복잡한 내용이라 간략한 설명만 정리를 해보자.
데이터와 인덱스가 군집화된(한곳에 모아놓은) 인덱스를 클러스터드 인덱스라고 부른다.
클러스터드 인덱스는 순서대로 정렬되어 있기 때문에 범위 검색에는 강력하지만 인서트 할 때는 어려움이 있을 수 있다.
예시
CREATE TABLE users (
id INT PRIMARY KEY, -- 기본 키가 자동으로 클러스터드 인덱스가 됨
name VARCHAR(50),
age INT
);
id가 클러스터드 인덱스가 되어 데이터가 id 기준으로 정렬된 상태로 저장된다.
클러스터드 인덱스는 내가 알고 있는 PK와 아주 유사하다.
반드시 PK인 것은 아니지만 PK와 거의 같다고 생각해도 무방!
범위 검색이 많을 때나 데이터가 자주 변경되지 않는 경우에 유리하다.
데이터와 연결되어 있는 것이 아니라 어떤 인덱스와 간접참조 되어 연결되어 있는것.
약한 참조로 되어있어서 굳이 순서대로 정렬하지 않아도 되고, hash 방식으로만 해서 굉장히 빠르게 데이터를 찾을 수 있다.
예시
CREATE INDEX idx_user_name ON users(name);
name 컬럼에 대해 넌 클러스터드 인덱스를 생성
name을 검색할 때 인덱스를 활용해 빠르게 조회 가능
특정 컬럼의 검색을 빠르게 해야 할 때나 JOIN, ORDER BY, GROUP BY를 자주 사용할 때, 자주 변경되는 데이터가 많은 경우 (INSERT, UPDATE, DELETE)에 유리하다.