PostgreSQL-Index를 요약, 번역 하였습니다.
CREATE TABLE test1 (
id integer,
content varchar
);
SELECT content FROM test1 WHERE id = 5;
위와 같은 상황에서 SELECT
문을 실행할 때 아무런 설정을 해놓지 않으면 시스템은 테이블의 모든 행을 뒤지면서 매칭되는 행을 찾습니다. 만약 테이블의 행 크기가 크고 쿼리를 통해 반환받는 행의 개수가 적다면 모든 행을 뒤지면서 매칭되는 행을 찾는 것은 매우 비효율적입니다. 이런 경우에 (위 예시에서는 id
컬럼에) 인덱스 값을 걸어준다면 매칭되는 행을 더 효율적으로 찾을 수 있습니다. postgreSQL
의 인덱스는 B-Tree
로 작동하므로 몇 번의 분기만으로 원하는 행을 찾을 수 있겠죠.
postgreSQL
에서 인덱스를 생성하는 명렁어는 아래와 같습니다.
CREATE INDEX your_index_name ON test1 (id);
인덱스는 언제든지 추가하거나 DROP
명령어를 통해 삭제할 수 있습니다.
인덱스를 한번 생성하면 추가적인 작업을 수행하지 않아도 테이블이 수정될 때 자동으로 업데이트되며 인덱스가 효율적으로 쓰일 거라 판단되는 쿼리 요청이 들어왔을 때 시스템이 알아서 인덱스를 활용합니다.
또한 인덱스는 UPDATE
, DELETE
명령도 효율적으로 수행할 수 있게 해주며 JOIN
명령이 실행될 때도 인덱스를 포함하고 있는 열이 JOIN
명령에 연관이 있다면 쿼리에 대한 응답을 훨씬 빨리 뱉어낼 수 있습니다.
크기가 큰 테이블에 인덱스를 생성할 때는 많은 시간이 걸릴 수 있습니다. PostgreSQL
은 인덱스가 생성되고 있을 때 읽기(SELECT
) 작업은 허용하지만 쓰기, 삭제, 갱신 (INSERT
, UPDATE
, DELETE
) 작업은 허용하지 않습니다.
인덱스가 한번 생성되면 시스템은 테이블과 인덱스를 동기화하기 때문에 데이터를 다룰 때 더 많은 오버헤드가 발생합니다. 따라서 거의 쓰이지 않거나 아예 쓰이지 않는 인덱스는 삭제를 해주어야 합니다.