실행 select count(*) from table_name
하면 행 수를 반환합니다.
무엇을 count(1)
합니까? 여기서 무엇을 1
의미합니까? 이것은 count(*)
(실행시 동일한 결과를 제공하기 때문에) 동일합니까?
답변
COUNT 함수에 대한 매개 변수는 각 행에 대해 평가되는 표현식입니다. COUNT 함수는 표현식이 널이 아닌 값으로 평가되는 행 수를 리턴합니다. (*는 평가되지 않는 특수 표현식이며 단순히 행 수를 반환합니다.)
표현식에는 ALL 및 DISTINCT의 두 가지 추가 수정자가 있습니다. 중복 항목을 삭제할지 여부를 결정합니다. ALL이 기본값이므로 예제는 count (ALL 1)과 동일하므로 중복이 유지됩니다.
표현식 “1”은 모든 행에 대해 널이 아닌 것으로 평가되고 중복을 제거하지 않기 때문에 COUNT (1)은 항상 COUNT (*)와 동일한 숫자를 리턴해야합니다.
답변
다음은 귀하의 질문에 대한 답변을 제공 하는 링크 입니다. 요컨대 :
count (*)는 그것을 쓰는 올바른 방법이고 count (1)은 내부적으로 count (*)되도록 최적화되어 있습니다.
a) 1이 null이 아닌 행을 계산하는 것이 비효율적입니다
.b) 행을 계산합니다.
답변
오라클에서 count (*)와 count (1)의 차이점은 무엇입니까?
count (*)는 모든 레코드, 즉 각각의 모든 셀을 계산하지만
count (1)은 값이 1 인 하나의 유사 열을 추가하고 모든 레코드의 개수를 반환 함을 의미합니다.
답변
이것은 다음의 차이점과 유사합니다.
SELECT * FROM table_name and SELECT 1 FROM table_name.
만약 당신이
SELECT 1 FROM table_name
테이블의 각 행에 대해 숫자 1을 제공합니다. 예 그래서 count(*)
및 count(1)
의지와 동일한 결과를 제공 count(8)
하거나count(column_name)
답변
다른 점이 없다.
COUNT(1)
기본적으로 각 행에 대해 상수 값 1 열을 계산합니다. 여기에 다른 사용자가 말했듯이 COUNT(0)
또는 과 동일합니다 COUNT(42)
. NULL
값이 아닌 모든 것으로 충분합니다.
http://asktom.oracle.com/pls/asktom/f?p=100:11:2603224624843292::::P11_QUESTION_ID:1156151916789
오라클 옵티마이 저는 분명히 버그를 가지고 있었기 때문에 어떤 열을 선택했는지와 인덱스에 있는지 여부에 따라 카운트가 영향을 받았기 때문에 COUNT (1) 규칙이 생겼습니다.
답변
SELECT COUNT(1) from <table name>
다음과 똑같은 일을해야합니다.
SELECT COUNT(*) from <table name>
SELECT COUNT(*)
일부 데이터베이스 보다 더 나은 성능 을 발휘할 수있는 몇 가지 이유가있을 수 있지만 DB의 버그라고 생각합니다.
SELECT COUNT(col_name) from <table name>
그러나 주어진 열에 대해 널이 아닌 값을 가진 행만 계산하므로 다른 의미를 갖습니다.
답변
오라클에서는 이것들이 정확히 같은 의미를 가지고 있다고 믿습니다.