최근에는 수 함수가 많이 사용되고 있으며, 세어야 할 수가 상대적으로 클 때 count(*)는 더 많은 시간이 걸리고, count(1)는 더 적은 시간이 걸린다는 것이 밝혀졌습니다.
일부 문서에는 다음과 같은 문구가 포함되어 있습니다:
데이터 테이블에 기본 키가 없다면, count(1)가 count(*)보다 빠릅니다. 기본 키가 있다면, 기본 키(공동 기본 키)도 count(*)보다 빠릅니다. 테이블에 필드가 하나만 있다면 count(*)가 가장 빠른 편입니다 count(*) count(1) 두 개를 비교해 보세요. 가장 중요한 것은 (1)에 대응하는 데이터 필드를 세는 것입니다. count(1)가 폴리인덱스 id라면, count(1)가 더 빠르게 작동해야 합니다. 하지만 그 차이는 매우 작다. count(*) 때문에 필드는 자동으로 최적화되어 있습니다. 그래서 굳이 카운트(?)를 하거나 count(*)를 사용할 필요는 없고, SQL이 최적화를 도와줍니다
카운트 세부사항: count(*)는 값이 null인 행을 포함해 테이블에 존재하는 모든 행의 총수를 반환합니다.하지만 count(열명)는 null을 제외한 테이블 내 모든 행의 총 수를 반환합니다(기본 값이 있는 열도 포함됩니다). 별개의 열명을 가진 경우, 결과는 null 값과 중복 데이터를 제거한 결과입니다
과거에는 블로그에서 모두가 count(0) 사용을 권장하고, 쿼리 효율이 비교적 높다는 내용이 있었던 것을 몰랐습니다
오늘날 count(0) 사용은 오해임이 밝혀졌습니다!!
count(0) 통계의 첫 번째 열이 비어 있지 않습니다
count(*) 대신 number(열명)나 count(constant)를 사용하지 마세요.
count(*)는 SQL92에서 정의한 표준 행 수의 문법으로, 데이터베이스, NULL과 non-NULL과는 무관합니다.
참고: count(*)는 NULL 값을 가진 행을 계산하지만, count(column name)은 NULL 값을 가진 행을 계산하지 않습니다.
따라서 앞으로 모든 통계를 수행하고 빈 데이터를 배제하지 않을 때는 정직하게 count(*)를 사용하는 것이 더 좋습니다!!
|