답변:
이는 차이를 유발할 NULL 값이 없기 때문에 물론 COUNT(any_non_null_column)
동일하게 제공됨을 의미 COUNT(*)
합니다.
일반적으로 색인을 생성하거나 SARGable을 COUNT(*)
사용할 수 없기 때문에 모든 색인을 사용할 수 있으므로 더 좋습니다COUNT(column_or_expression)
에서 ANSI-92 ( "찾기 Scalar expressions 125
")
케이스:
a) COUNT (*)가 지정되면 결과는 T의 카디널리티입니다.
b) 그렇지 않으면 TX가 <값 표현식>을 T의 각 행에 적용하고 널값을 제거한 결과 인 단일 컬럼 테이블이되게하십시오. 하나 이상의 널값이 제거되면 완료 조건이 발생합니다. 경고-설정된 함수에서 널값이 제거됩니다.
동일한 규칙이 너무 SQL Server 및베이스에 적용 적어도
참고 : 1은 널 입력 불가능 표현식이므로 COUNT (1)은 COUNT (*)와 같습니다.
COUNT(*)
, COUNT(<constant>)
그리고 COUNT(<column name>)
세 가지가 접두어로 될 수 있고 ALL
또는 DISTINCT
(을 디폴트 ALL
생략하는 경우). 나는 당신이 말하는 곳에서 어떤 표현을 사용할 수 있는지 궁금합니다 _or_expression
.
COUNT(1)
쓸모없는 예로서 @oneday 와 같습니다 COUNT(*)
. COUNT(CASE WHEN a>b THEN 1 END)
예를 들어 a> b.
Oracle의 최신 버전 (예 : 8.x + ) 에서는 동일한 작업 을 수행합니다 . 다시 말해서 의미 상 유일한 차이점은 다음과 같습니다.
select count(*) from any_table
하고 싶은 일을 쉽게 읽을 수 있고 분명합니다.
select count(any_non_null_column) from any_table
읽기 어렵습니다
any_non_null_column
실제로 다음과 같이 시행 되는지 여부 를 고려해야합니다not null
짧은에서 사용count(*)
최신 버전에서 COUNT (*)와 수 (사이에는 차이 실제로이없는 모든 NOT NULL 열 ) 온 강조와 함께, NOT NULL : :-) 우연히 블로그 게시물이 항목을 적용 적이 수보다 더 나은 수 (COL)인가 (*)?
Oracle8i Certified Professional DBA 인증 시험 가이드 (ISBN 0072130601) , 78 페이지 책에서 COUNT (1)은 모든 열의 Null 허용 여부에 대한 데이터 사전을 확인하기 위해 특정 메커니즘이 작동하기 때문에 COUNT (*) 보다 실제로 더 빠르게 실행됩니다. COUNT (*)를 사용할 때 적어도 null이 아닌 첫 번째 열 ) . COUNT (1)은 이러한 메커니즘을 무시합니다.
MySQL은 'tblname의 SELECT COUNT (1);에 대한 속임수; 테이블 수에 대한 테이블 헤더를 읽어 MyISAM 테이블에서. InnoDB는 매번 계산합니다.
데이터베이스에 관계없이 COUNT (1)이 COUNT (*)보다 빠르게 실행되는지 테스트하려면 다음을 실행하고 실행 시간을 스스로 판단하십시오.
SELECT COUNT(1) FROM tblname WHERE 1 = 1;
SELECT COUNT(*) FROM tblname WHERE 1 = 1;
SELECT COUNT(column-name) FROM tblname WHERE 1 = 1;
이는 COUNT 기능이 스토리지 엔진 또는 RDBMS에 관계없이 동일한 레벨의 경기장에서 작동하게합니다.
count(*)
사용합니다.