Postgres에서 효율적으로 타임스탬프를 5분 경계로 자르기
타임스탬프 자르기는 시간 분석에 필수적입니다. Postgres는 date_trunc 기능을 제공하여 타임스탬프를 다양한 단위로 반올림할 수 있습니다. 그러나 가장 가까운 5분 경계로 자르려면 보다 구체적인 접근 방식이 필요합니다.
일반적으로 다음과 같은 간단한 방법이 사용됩니다.
date_trunc('hour', val) + date_part('minute', val)::int / 5 * interval '5 min'
그러나 성능이 중요한 경우에는 가능한 가장 빠른 솔루션을 모색하는 것이 중요합니다.
대체 접근 방식: 시대를 통과 시간
대체 접근 방식은 타임스탬프를 에포크 타임스탬프로 변환한 다음 자르는 것입니다. 이 방법은 다음과 같이 표현됩니다.
SELECT to_timestamp( floor(EXTRACT(epoch FROM ht.time) / EXTRACT(epoch FROM interval '5 min')) * EXTRACT(epoch FROM interval '5 min') ) FROM huge_table AS ht LIMIT 4000000
벤치마킹 및 결과
두 방법의 성능을 평가하기 위해 4백만 개의 큰 테이블을 대상으로 비공식 벤치마크를 수행했습니다. 행. 캐싱 이점을 방지하기 위해 쿼리를 번갈아 수행했습니다.
결과:
Method | Run 1 | Run 3 | Run 5 |
---|---|---|---|
Epoch Time | 39.368 seconds | 39.526 seconds | 39.883 seconds |
Hour and Minute | 34.189 seconds | 37.028 seconds | 32.397 seconds |
결론
놀랍게도 date_trunc 및 date_part는 지속적으로 에포크 시간 접근 방식보다 성능이 뛰어났습니다. 더 다양하고 매개변수화하기가 더 쉬움에도 불구하고 에포크 시간 방법은 더 넓은 범위의 시간 단위 잘림에 대해 일부 성능을 희생합니다.
따라서 특히 Postgres에서 타임스탬프를 5분 경계로 자르려면 date_trunc를 사용하는 간단한 방법이 필요합니다. date_part가 권장되는 접근 방식입니다.
위 내용은 PostgreSQL에서 타임스탬프를 5분 간격으로 자르는 가장 빠른 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!