by 윤 posgres sql query generate_series 성능 [2022.12.19 11:08:06]
select generate_series('2020-01-01'::date, '2020-12-31'::date, '1 days') days;
generate_series를 통해서 특정 날짜 범위를 1일씩 증가시켜서 날짜를 얻을 수 있다고 알고 있습니다.
generate_series를 사용했을 때 성능 측면에서 괜찮은지 궁금합니다.
그리고 generate_series를 대체할 수 있는 다른 것이 있는지도 궁금합니다.
1. 성능이 괜찮은지는 비교 대상이 있어야 판단할 수 있는데요.
- 예를 들면 달력테이블을 미리 만들어 두고 사용하는 방식과 비교한다면
- 테이블을 읽는 I/O 가 발생되지 않는 generate_series 가 더 좋지 않을까? 생각되네요.
2. 대체할 수 있는 방법을 생각나는 대로 적어보면.
- 달력테이블
- Recursive 쿼리
- 내가 모르는 또 다른 방법이 있을지도?
WITH RECURSIVE t AS ( SELECT '2020-01-01'::DATE dt UNION ALL SELECT (dt + INTERVAL '1 DAY')::DATE FROM t WHERE dt < '2020-12-31'::DATE ) SELECT * FROM t ;