DB/PostgreSql

PostgreSql Fk 적용시 인덱스 자동 적용 되는가?

hwanguu 2024. 4. 3. 17:33

결론만 말하면 아니다

 

 

예를들어 아래 두 테이블이 있다.

 

Message

 - id (PK)

 - contents

 - send_time

 - created_at

 

Target

 - id (PK)

 - message_id (FK)

 - key

 

Message와 Target은 Fk 관계이다.

 

 

Message와 Target을 Join한 경우 FK에 인덱스를 생성한것과 생성하지 않은것에 대한 차이를 알아보자

 

 

아래는 Target 테이블에 message_id 컬럼에 인덱스를 걸지 않은 경우의 Query Explain이다

 

 

Seq Scan으로 쿼리를 하는것을 볼 수 있다.

Seq Scan(Sequential Scan)은 테이블의 모든 데이터를 하나씩 확인하는 방법이다. 주로 인덱스가 없는 column을 조건으로 검색할 경우에 사용된다.

 

실행 시간도 7.357ms 이다

 

 

아래는 Target 테이블에 message_id 컬럼에 인덱스를 걸었을때의 Query Explain이다

 

Index Scan을 하는것을 볼수 있다

 

실행 시간도 0.081ms

 

결론 - FK를 설정해도 Index는 걸리지 않는다. (따로 Index를 생성해야함)