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
반응형
'IT > DB' 카테고리의 다른 글
데이터베이스에서 execute 함수 역할은? (0) | 2025.03.02 |
---|---|
MYSQL 데이터 import 오류 TypeError: sequence item 0: expected string, NoneType foundERROR: Import data file: sequence item 0: expected string, NoneType foundFailed (0) | 2025.02.15 |
데이터베이스 COLLATION 개념은? (0) | 2025.02.06 |
mysql Error Code: 1046 해결 방법 (0) | 2025.02.06 |
sql 쿼리에서 데이터가 'com.' 으로 시작하는 값 조회하는 쿼리는? (0) | 2025.02.06 |