728x90
반응형
1. 카운트 쿼리에 사용되는 데이터가 null 일 경우 건수에 포함되지 않는다.
- 이 점을 활용하여 (case when ~ then 1 else null end) 활용 필터링이 가능하다.
- count(1), count(*), count(column) 모두 실행계획과 실행시간이 동일하니, column 쓸 때만 null로 개수 빠지는지 확인만 하면 된다.
--null 상관없이 전체 건수를 셈
SELECT count(*) FROM board;
SELECT count(1) FROM board;
--contents 중 null 인 데이터를 빼고 셈
SELECT count(title) FROM board;
--contents 중 null 인 데이터를 빼고 중복 제거하여 셈
SELECT count(distinct title) FROM board;
--contents 중 제목이 '테스트'인 글의 건수와 '제목'인 글의 건수를 각각 셈
SELECT
count(case when title = '테스트' then 1 else null end),
count(case when title = '제목' then 1 else null end)
FROM board;
2. 카운트 쿼리에는 MAX 값이 필요하다.
- 알림 안 읽은 건수가 있다고 할 때, 아무리 안 읽은게 많아 10만 개가 된다고 하더라도, 사용성에 의하면 999 정도로 제한하면 충분히 알림의 건수를 표현할 수 있다.
- 실제 경험으로, 휴면 계정들의 알림 안 읽은 건수가 엄청나게 계산되면 엄청난 부하를 만들어낼 수도 있다.
-- CASE 1: 실행은 되지만 count가 100개 까지 세지는 것은 아니다. (limit 100은 무시됨)
SELECT count(1) FROM board LIMIT 100;
-- CASE 2: 이미 계산 다하고 결과 값을 컨트롤 하는거라 부하는 위와 비슷하다.
select (case when count(1) > 1000 then 1000 else count(1) end) from board;
-- CASE 3: 성능이 매우 좋다.
select count(1) from (select 1 from board limit 1000) foo;
반응형
'Googling > postgresql' 카테고리의 다른 글
[postgreSQL] 써보니 유용한 쿼리 (feat. 메타 정보 쿼리) (0) | 2022.02.22 |
---|---|
[RDBMS] PostgreSQL vs MySQL 차이 (fear. 버전을 막론하고) (4) | 2021.08.07 |
[postgreSQL] 재귀쿼리 만들기 (Recursive) ( + 매우 주의해야하는 케이스 : 무한루프) (2) | 2021.08.01 |
[postgreSQL] 인덱스의 성능을 위하여 알아둘 것. 카디널리티 (0) | 2021.05.26 |
[postgreSQL] 대용량 테스트 데이터 만들기 (Dummy Data) (0) | 2021.05.20 |