Oracle에서 조건에 맞는 행의 숫자를 세는 COUNT 함수가 있습니다.
일반적으로 테이블 전체 혹은 조건에 맞는 ROW(행)의 수를 파악하기 위해서 SELECT COUNT(*) FROM 문을 많이 사용합니다. 그런데 가끔 COUNT(*) 대신 COUNT(1)을 사용하는 것이 성능이 더 좋다는 얘기가 있어서 확인해보고, COUNT문 사용 시 컬럼명을 적용하는 것에 대해서 찾아보고 정리하였습니다.
1. COUNT(*) vs COUNT(1)
COUNT(*)과 COUNT(1)에 대한 논쟁은 그동안 많은 포럼에서 차이점에 대한 논쟁이 있었습니다만, 결론부터 얘기하자면 실제 성능에는 차이가 없으므로 보편적인 COUNT(*)을 사용할 것을 언급하고 있습니다. 실제로 제가 실행계획을 분석해봐도 동일했습니다.
-- 아래 문장은 모두 동일한 값을 반환
SELECT COUNT(*) FROM employees;
SELECT COUNT(1) FROM employees;
SELECT COUNT(-13) FROM employees;
SELECT COUNT('count diffenence') FROM employees;
실제로 과거 ORACLE 8 이전 버전에서는 차이가 있었다고 하지만, ORACLE 8을 포함한 이후 버전에서는 실행계획이 동일하므로 성능에 차이가 없는 것으로 밝혀졌습니다. 보다 상세한 근거는 아래 참고란에 링크 된 부분을 열람해보면 알 수 있습니다.
2. COUNT(*) vs COUNT(column_name)
COUNT(*)은 NULL을 포함한 모든 행의 수를 계산하여 값을 반환합니다.
COUNT(column_name)은 컬럼 명의 값이 NULL인 행은 제외한 행의 수를 반환합니다.
3. COUNT(column_name) vs COUNT(DISTINCT column_name)
COUNT(column_name)은 값이 NULL인 행을 제외한 행의 수를 반환하지만 중복도 포함해서 반환합니다.
COUNT(DISTINCT column_name)은 값이 NULL인 행을 제외하고 중복을 제거한 행의 수를 반환합니다.
참고
Oracle: Count(*) or Count(1) – that is the question
https://pretius.com/blog/difference-between-count-vs-count1-oracle/
difference between count(1) and count(*)
https://asktom.oracle.com/pls/apex/f?p=100:11:0::NO::P11_QUESTION_ID:1156159920245
What is the Difference Between COUNT(*), COUNT(1), COUNT(column name), and COUNT(DISTINCT column name)?
https://learnsql.com/blog/difference-between-count-distinct/
'Dev. Cookbook > SQL, Oracle, MariaDB' 카테고리의 다른 글
[Oracle] ORA-08002: 시퀀스 xxx.CURRVAL은 이 세션에서는 정의 되어 있지 않습니다 (0) | 2022.05.27 |
---|---|
[Oracle] sys, system 계정 비밀번호 재설정 방법 (0) | 2022.05.24 |
[Oracle] Cursor와 ROWCOUNT에 대해 이해하기 (0) | 2022.05.06 |
[Oracle] ORA-01403: 데이터를 찾을 수 없습니다. NO DATA FOUND 에러 해결 방법 3가지 (0) | 2022.05.05 |
[ORACLE] 시노님(Synonym) 삭제 오류, ORA-01434 : private synonym to be dropped does not exist (0) | 2022.04.26 |
댓글