Database

[PostgreSQL] 쿼리가 느린 이유: Seq Scan과 인덱스 누락

끊임없이 개발하는 새럼 2025. 6. 23. 15:49

해당 쿼리문이 이상하게 늦다 싶으실 때 PK를 확인하는 쿼리문

SELECT a.attname AS column_name
FROM pg_index i
JOIN pg_attribute a 
  ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey)
WHERE i.indrelid = 'table_name'::regclass
  AND i.indisprimary;

dbeaver 같은 편집기에서도 쉽게 확인할 수 있지만, 사용 불가라면 저 쿼리문을 사용하시면 됩니다


+ 번외

EXPLAIN ANALYZE
UPDATE table_name
SET img_down_cd = 'S',
    img_nas_path = '/path/to/file.jpg',
    img_down_crtmm = CURRENT_TIMESTAMP
WHERE doc_id = '123456';

실행하려는 쿼리문이 이상하게 늦는다? 할 때 쿼리문 앞에 EXPLAIN ANALYZE를 넣고 확인하시면 됩니다.

Update on table_name  (cost=0.29..8.30 rows=1 width=0)
  ->  Index Scan using table_name_pkey on table_name  (cost=0.29..8.30 rows=1 width=0)
        Index Cond: (doc_id = '123456'::text)

Index scan이 뜬다면 인덱스 쪽 문제는 없고 다른 쪽에 문제가 있을 확률이 높습니다.

-> Seq Scan on table_name
   Filter: (doc_id = '123456'::text)
   Rows Removed by Filter: 7139759

Seq Scan이 뜬다면 테이블 전체를 순회했다는 뜻으로 조건에 맞지 않은 row를 713만 건 조회했다는 의미입니다. 이때는 해당 조건에 주는 컬럼을 인덱스 생성해 주시면 됩니다.