Skip to the content.

데이터베이스에서 데이터 통계를 낼 때 집계 함수인 COUNT()SUM()은 가장 기본적이고 널리 사용되는 SQL 함수입니다. 하지만 두 함수를 사용하면서 COUNT(*)는 정상 작동하지만 SUM(*)을 수행하려 할 때는 SQL 문법 에러(Syntax Error)를 맞닥뜨리게 됩니다. 이번 포스팅에서는 왜 이런 현상이 발생하는지, 그리고 COUNT(*)COUNT(컬럼명)의 Null 처리 및 성능 차이에 대해 상세히 다뤄보겠습니다.


1. SUM(*)은 왜 불가능할까? (집계 대상의 데이터 타입)

결론부터 말하면, SUM() 함수는 숫자형 데이터의 산술 합계를 계산하는 연산이고, COUNT() 함수는 단순히 행(Row)의 개수를 세는 연산이기 때문에 발생하는 차이입니다.


2. COUNT(*) vs COUNT(컬럼명)

반면, 개수를 세는 COUNT() 함수는 모든 컬럼을 대상으로 하는 COUNT(*)와 특정 컬럼을 지정하는 COUNT(컬럼명) 두 가지 문법을 모두 정상 지원합니다. 하지만 이 둘 사이에는 Null 처리 규칙동작 메커니즘에서 큰 차이가 있습니다.

1) Null값 처리 여부 (가장 중요한 차이)

2) 성능과 옵티마이저의 동작

과거 데이터베이스(Legacy DBMS)에서는 COUNT(*)를 사용하면 모든 컬럼을 메모리로 퍼 올려야 하므로 COUNT(1)이나 COUNT(PK컬럼)을 쓰는 것이 더 빠르다는 속설이 있었습니다. 하지만 최신 DBMS(특히 MySQL InnoDB 엔진) 환경에서는 성능 차이가 없거나 오히려 COUNT(*)가 더 나은 최적화를 보입니다.


Summary

SQL 집계 함수의 이러한 데이터 타입 및 Null 판단 규칙의 세세한 메커니즘을 명확히 알아두어야 데이터 정합성을 깨뜨리지 않는 쿼리를 구현할 수 있습니다.