728x90

테이블 Row 수가 70억이 넘는 데이터를 페이징 기능이 있는 게시판을 구현했다. 기능은 이슈가 없었지만 단 한 가지 조회 속도가 너무 느렸다. 정확하지 않지만 약 70~80초 delay가 걸렸고 이를 해결하여 공유하고자 한다.


리스트를 조회할 땐 속도가 느리지 않았다. 이유는 index로 페이지 num을 1~10까지만 가져오게 했기 때문이다.

문제는 count를 조회할 때 발생했다.

 

1. 데이터 전체 count 조회 쿼리(변경 전)

SELECT count(*)
FROM [스키마명].[테이블명];

 

2. 데이터 전체 count 조회 쿼리(변경 후)

SELECT n_live_tup 
FROM pg_catalog.pg_stat_all_tables 
WHERE schemaname = [스키마명]
AND relname like [테이블명]
ORDER BY n_live_tup desc;

 

 - pg_stat_all_tables는 현재 DB 테이블별 통계정보 제공하고 있는 테이블이다.

 

변경 전 쿼리는 테이블 row를 전체 로드하여 count를 조회하기 때문에 느리다. 하지만 변경 후 쿼리는 해당 테이블 1행에서 저장된 수치를 가져오기 때문에 엄청 빠른 차이가 있다.

728x90
TOP