COUNT(*)이 가장 자주 보이고, 표준이지만 가끔 COUNT(1)이나 COUNT(0)도 가끔 보인다.
기능 상 차이도 없고, 성능 차이도 없는 것 같다.
그런데 신경이 쓰인다. 왜 COUNT(*)을 안 쓰고, COUNT(1)이나 COUNT(0)을 사용했을까?
COUNT(1)과 COUNT(*)은 아무 차이가 없다.
대부분 데이터베이스의 대부분 버전에서 COUNT(1)과 COUNT(*)은 기능 적으로도 성능 적으로도 아무런 차이가 없다.
실행 계획도 동일하다.
COUNT(1)이 COUNT(*)보다 더 빠르다?
일부 오래된 데이터베이스에서는 COUNT(1)이 약간 더 빠를 수도 있다고 한다. Oracle 8i 이전 버전에서는 COUNT(1)이 더 빨랐다고 한다.
나는 그냥 "일부 개발자의 습관이지 않을까?" 라고 생각했지만 아무 이유가 없는 건 아니었다.
나도 오래된 데이터베이스를 사용하던 개발자였다면 계속해서 습관적으로 COUNT(1)을 사용했을 수도 있었을 것 같다.
실무에서 보이는 비율
1위 : COUNT(*) : 70%
2위 : COUNT(1) : 20%
3위 : COUNT(0) : 10%
※ 그냥 개인적인 경험을 재미 삼아서 퍼센트로 나타내 봄
![]() |
그냥 재미로 만들어본 Gemini 생성 이미지 |
COUNT(*) vs COUNT(1) 어떤 걸 쓰는 게 좋을까?
대부분의 공식 문서나 개발자들은 COUNT(*)을 권장한다.
나도 COUNT(*)를 쓰는 게 옳다고 생각한다. 굳이 COUNT(1)을 써서 다른 개발자들에게 고민거리를 만들어 줄 필요는 없다.
결론
딱히 논란의 여지가 없다. 그냥 COUNT(*)을 쓰면 된다. 하지만 누군가 COUNT(1)을 썼다고 해서 나쁘게 생각할 필요도 없다. 어떤 환경에서는 정말 성능 차이가 있기도 하니 말이다.
딱히 글까지 쓸 주제도 아니지만 예전 환경에서는 성능 차이가 있었다는 사실이 인상 깊어서 글을 남겨보았다.