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
'DataBase > PostgreSQL' 카테고리의 다른 글
[postgres] 외부 접근 관리 방법(firewall, pg_hba.conf) (0) | 2023.12.31 |
---|---|
쿼리 튜닝 ] Group by와 between 같이 사용 시 발생하는 이슈 (0) | 2023.06.17 |