[1] Count(?) 성능
Count(*)
, Count(1)
, Count(Not Null 컬럼)
의 성능과 결과는 동일하다.
[2] Count(컬럼) 필터링
SELECT
-- 전체 개수
COUNT(*)
,COUNT(1)
,COUNT(user_idx) -- Not Null
-- 대상 컬럼의 값이 Not Null인 튜플 개수
,COUNT(tel_num)
-- 대상 컬럼의 값이 Not Null인 튜플 개수 (중복 제거)
,COUNT(distinct tel_num)
-- 필터링
,COUNT(CASE WHEN tel_num > '01090000000' THEN 1 ELSE NULL END)
,COUNT(*) FILTER (WHERE tel_num > '01090000000')
FROM users_info;
Count()의 최댓값을 제한하는 경우 최적화
- 최댓값 제한 예시:
1000
- [1] 보다 [2]의 성능이 더 좋다.
-- [1]
SELECT (CASE WHEN COUNT(1) > 1000 THEN 1000 ELSE count(1) END)
FROM users;
-- [2]
SELECT COUNT(1)
FROM (SELECT 1 FROM users LIMIT 1000) a;