PostgreSQL SELECT DISTINCT
복합 키의 성능 문제
복합 기본 키(예: SELECT DISTINCT
)가 있는 PostgreSQL 테이블에서 (product_id, trade_id)
을 사용하면 놀라울 정도로 느릴 수 있습니다. 쿼리 플래너는 인덱스를 효율적으로 활용하는 대신 순차 스캔을 선택하는 경우가 많습니다.
왜 느린가요?
해결책: CTE를 사용한 인덱스 건너뛰기 스캔 시뮬레이션
실제 인덱스 건너뛰기 스캔을 사용할 수는 없지만 재귀적 공통 테이블 표현식(CTE)을 사용하여 그 동작을 효과적으로 모방할 수 있습니다.
<code class="language-sql">WITH RECURSIVE cte AS ( ( -- parentheses are crucial SELECT product_id FROM tickers ORDER BY 1 LIMIT 1 ) UNION ALL SELECT l.* FROM cte c CROSS JOIN LATERAL ( SELECT product_id FROM tickers t WHERE t.product_id > c.product_id ORDER BY 1 LIMIT 1 ) l ) SELECT * FROM cte;</code>
이 CTE는 효율성을 위해 product_id
의 인덱스를 활용하여 정렬된 순서로 고유한 (product_id)
값을 반복합니다.
이 접근 방식의 장점
(product_id, trade_id)
와 (product_id)
의 인덱스를 모두 효과적으로 활용합니다.위 내용은 복합 기본 키를 사용하는 PostgreSQL SELECT DISTINCT 쿼리가 왜 이렇게 느린가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!