https://hue9010.github.io/db/select_count/
결론부터 말하면 차이가 없다입니다.
You Asked
What is the difference between count(1) and count(*) in a sql query
eg.
select count(1) from emp;
and
select count(*) from emp;and we said…
nothing, they are the same, incur the same amount of work – do the same thing, take the same amount of resources.
출처: ORACLE Ask TOM
위 출처를 보면 동일한 수의 블록 읽기/쓰기/처리와 같은 CPU 사용 시간, 수행 시간을 갖는다고 합니다.
그렇다면 COUNT(*)과 COUNT(컬럼)은?
이것도 결론부터 말하면 차이가 존재한다입니다. NULL 값에 대해서 카운팅을 하냐 안하냐의 차이가 존재합니다.
COUNT(컬럼) - NULL 값이 들어간 행은 카운트하지 않습니다.
COUNT(*) - NULL 값에 상관없이 모든 행을 카운트합니다.
사실 이 차이는 컬럼을 지정하여 COUNT 하는 경우 값이 NULL이면 세지 않는 게 당연합니다. 즉, 전체 행의 개수를 세려고 했다면 다른 결과가 나오는 게 정상입니다. 만약 NOT NULL인 컬럼이였다면 COUNT(*)과 동일한 결과 값(과정이 아닌 결과에 대해서만)이 나올 겁니다.
다만, COUNT(*)과 COUNT(컬럼)은 사용 목적을 달리하는 게 맞습니다. COUNT(*)의 경우 전체 행이 몇 개인지 세는 경우, COUNT(컬럼)은 해당 컬럼의 행이 몇 개인지 세는 경우로 구분하여 사용하는 게 옳은 사용법입니다.
아무리 해당 컬럼이 NOT NULL인 경우라 해도 본인을 제외 한 다른 사람이 해당 쿼리를 봤을 때 전체 행의 갯수를 세기 위해 만든 쿼리란 걸 모를 확률이 높습니다.(심지어 반년 뒤의 자신 또한 포함해서 말이죠)
https://okky.kr/article/527215
오라클에서
count(1)은 조건이 일치하는 행에 대해 1을 배정하고 그 수를 세라는 뜻이고
count(*)은 조건이 일치하는 모든 행의 수를 세라는 뜻으로 알고있습니다
count(컬럼명)은 null값을 제외하지만
위 두개는 null값을 포함하여 count한다고 알고있는데 그러면 결국 같은 뜻 아닌가요?
=> 답변
같은 기능으로 알고 있습니다.
성능상 count(1)이 더 빠르다 정도 알고 있습니다.
https://stackoverflow.com/questions/2710621/count-vs-count1-vs-countpk-which-is-better
'차근차근 > Oracle' 카테고리의 다른 글
REGEXP_SUBSTR , LEVEL, CONNECT BY, INSTR (0) | 2022.04.13 |
---|---|
NEXTVAL , CURRVAL (0) | 2022.03.31 |
ROWID (0) | 2022.03.25 |
오라클 관리자(system, sys) 계정 비밀번호 찾기/변경 & 윈도우 서버에서 oracle서버 교체작업 (0) | 2022.02.26 |
[Oracle] LISTAGG() (0) | 2022.01.05 |