by 윤 posgres sql query generate_series 성능 [2022.12.19 11:08:06]
1 | 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 쿼리
- 내가 모르는 또 다른 방법이 있을지도?
1 2 3 4 5 6 7 8 9 10 11 | 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 ; |