차근차근/이것저것

count(*) 과 count(1)

예쁜꽃이피었으면 2015. 1. 22. 14:57

http://www.gurubee.net/article/50585


사실 검색하니까 이와 같은 질문이 있어서 읽어보았습니다


같다고는 이해하였지만


회사에서 사용하고 있는 쿼리 중에 count(*) 와 count(1) 이 섞여있는것을 보고 다시한번 묻게 되었습니다


(하나의 쿼리에서는 섞여 있지 않았으나 각각의 독립적인 select문에서 count(*) 와 count(1)이 있었습니다)


개개인의 쿼리 작성 스타일인지, 아니면 각각의 count문이 사용되는 이유가 있는건지 궁급합니다


차이가 없죠. 혹 테이블에 엄청나게 많은 칼럼이 있는 경우 성능차이가 있는지 모르겠지만 지금까지 사용한 바에 의하면 차이가 없습니다. 단, COUNT 함수에 칼럼명을 기재할 때는 칼럼 값의 NULL 여부에 따라 COUNT(*)와 차이가 있습니다.






* 로 하는게 속도상 가장 빠르다고 알고 있습니다.







결과가 같다고 해서 그 의미까지 같은것은 아닙니다. 

COUNT(*)는 결과행의 수를 셉니다. 

COUNT(컬럼명)은 컬럼값의의 수를 셉니다. 

- 널포함 컬럼의 경우 널이 아닌 값의 수만 셉니다. 

- 낫널 컬럼의 경우 결과는 Count(*)와 같습니다. 

COUNT(1)은 1의 수를 셉니다. 

COUNT(0)은 0의 수를 셉니다. 

COUNT('a')은 'a'의 수를 셉니다. 

개인적인 코딩 스타일이라고 생각됩니다.






이건 질문과 약간 다른 얘기인데, 덧글 보고 덧글 씁니다. 

COUNT(칼럼명), COUNT(*)는 속도 차이가 당근 있습니다. 

양이 많은 때는 어떤지 몰라도? 라는 표현이 적절하지 않습니다. 

양이 적을 때는 속도 차이가 없지만 DB는 써서 만든 시스템을 평생 소규모 데이타 

처리만 하는 것이 아니라면 대부분 양을 많을 때 고려하거나 개념을 정확히 

알고 쓰셔야 합니다. 답은 말하지 않겠습니다. 

그리고 질문에 관계 된 답으로 

COUNT(*)나 COUNT(색인필드명)으로 하세요. 

COUNT(1), COUNT(100), COUNT(999) 식의 기술 방법은 

COUNT(*) 대체용이 아닙니다. COUNT(*)를 COUNT(9)식으로 써도 같은 결과라 

생각하고 COUNT(숫자)를 쓰시면 안됩니다. 평생 같은결과라 할지라도 

질의어 분별력이 떨어집니다.

반응형