본문 바로가기

IT/DB

select count(*) 이랑 select count(1) 차이는?

728x90
반응형

 

 

SELECT COUNT(*) vs SELECT COUNT(1) 차이점

 

둘 다 테이블의 행 수를 세는 역할을 하지만, 내부적으로 어떻게 동작하는지 차이가 있습니다.

 


 

1. 기본 개념

 

쿼리 설명
SELECT COUNT(*) 모든 컬럼을 포함한 행 개수를 셈
SELECT COUNT(1) 고정된 숫자(1)를 기준으로 행 개수를 셈

2. COUNT(*) 작동 방식

 
SELECT COUNT(*) FROM employees;
 
  • 모든 컬럼을 포함한 행 개수를 계산합니다.
  • NULL 값이 포함된 행도 계산합니다.
  • MySQL에서는 최적화되어 실제 데이터를 읽지 않고 테이블의 메타데이터를 이용해 빠르게 개수를 반환하는 경우도 있음.

3. COUNT(1) 작동 방식

 
SELECT COUNT(1) FROM employees;
 
  • 내부적으로 각 행마다 "1"이라는 상수 값을 삽입한 후 개수를 셈.
  • NULL이 아니므로 모든 행이 포함됨.
  • 실행 계획에서 COUNT(1)은 최적화되어 COUNT(*)와 거의 동일한 성능을 가짐.

4. 차이점 비교

 

차이점 COUNT(*) COUNT(1)
NULL 값 포함 여부 포함 포함
최적화 여부 테이블 메타데이터 활용 실행 계획 최적화
사용 방식 모든 컬럼을 고려 상수(1)만 고려

5. 실제 성능 차이?

🔹 테스트 예제

 
EXPLAIN SELECT COUNT(*) FROM employees; 
EXPLAIN SELECT COUNT(1) FROM employees;
 
  • MySQL에서는 두 쿼리의 실행 계획(EXPLAIN) 결과가 동일하게 나오는 경우가 많음.
  • 일부 DBMS(Oracle 등)에서는 COUNT(1)이 COUNT(*)보다 약간 빠를 수도 있지만, 현대적인 최적화된 DBMS에서는 거의 차이가 없음.

6. 결론

  • MySQL, PostgreSQL, SQL Server 등 대부분의 DBMS에서는 COUNT(*)과 COUNT(1) 성능 차이가 거의 없음.
  • COUNT(*)이 더 직관적이고, 표준 SQL에서 권장되는 방식.
  • 특정 컬럼의 NULL을 제외하고 카운트하려면 COUNT(column_name) 사용.
300x250
반응형