SQL COUNT(*) vs COUNT(1): 차이가 있을까?

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)을 썼다고 해서 나쁘게 생각할 필요도 없다. 어떤 환경에서는 정말 성능 차이가 있기도 하니 말이다.

딱히 글까지 쓸 주제도 아니지만 예전 환경에서는 성능 차이가 있었다는 사실이 인상 깊어서 글을 남겨보았다.


댓글 쓰기

다음 이전