대형 테이블에서 OFFSET을 사용하여 느린 PostgreSQL 쿼리 최적화 대형 PostgreSQL 테이블에 대한 쿼리에서 OFFSET을 사용하면 성능 병목 현상이 발생하는 경우가 많습니다. 이 기사에서는 PostgreSQL 9.5 이상 버전의 최적화 전략에 초점을 맞춰 이 문제를 다루고 있습니다. 도전: 수많은 레코드가 포함된 실질적인 테이블 big_table을 상상해 보세요. ORDER BY 및 OFFSET을 사용하여 페이지가 매겨진 데이터를 검색해야 합니다. 적절한 인덱스(예: vote_order_asc 및 vote_order_desc)를 사용하더라도 OFFSET 값이 크면 성능이 크게 저하됩니다. 해결책: 키 세트 페이지 매김 PostgreSQL은 OFFSET 값이 큰 행을 직접 건너뛸 수 없으므로 대상 오프셋에 도달하기 전에 모든 행을 정렬하고 계산해야 합니다. 이 문제를 극복하려면 행 값 비교를 사용하여 키 세트 페이지 매김을 사용하십시오. SELECT * FROM big_table WHERE (vote, id) > (vote_x, id_x) ORDER BY vote, id LIMIT n;로그인 후 복사 이 방법을 사용하려면 일관된 결과를 얻으려면 (vote, id)의 고유한 조합이 필요합니다. 여기서는 vote_order_asc 색인이 도움이 됩니다. 중요한 조정: ORDER BY 절의 WHERE 방향과 비교 연산자 간의 일관성을 유지하세요. 예를 들어 WHERE가 >을 사용하는 경우 ORDER BY는 ASC을 사용해야 합니다. 추가 고려사항: 이 키 세트 페이지 매김 접근 방식은 상당한 성능 향상을 제공하지만 다음과 같은 제한 사항을 인정하는 것이 중요합니다. (vote, id)의 고유성을 가정합니다. 표가 동시에 업데이트되면 최적의 전략 선택을 위한 추가 분석이 필요할 수 있습니다. 동시 수정이 자주 발생하는 복잡한 시나리오의 경우 가장 효과적인 최적화 접근 방식을 식별하려면 더 자세한 조사가 중요합니다.