Home [짧] PostgreSQL에서의 INDEX
Post
Cancel

[짧] PostgreSQL에서의 INDEX

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 ) 작업은 허용하지 않습니다.

인덱스가 한번 생성되면 시스템은 테이블과 인덱스를 동기화하기 때문에 데이터를 다룰 때 더 많은 오버헤드가 발생합니다. 따라서 거의 쓰이지 않거나 아예 쓰이지 않는 인덱스는 삭제를 해주어야 합니다.

This post is licensed under CC BY 4.0 by the author.

[알고리즘] 그림으로 이해하는 다익스트라(Dijkstra) 알고리즘

[Docker] Docker를 사용하여 postgreSQL 서버를 띄워보자(1)