데이터베이스 테이블에서 "select count (1) from table_name"은 무엇을 의미합니까?
실행 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>
그러나 주어진 열에 대해 널이 아닌 값을 가진 행만 계산하므로 다른 의미를 갖습니다.
오라클에서 나는 이것들이 정확히 같은 의미를 가지고 있다고 믿습니다.
다음과 같이 테스트 할 수 있습니다.
create table test1(
id number,
name varchar2(20)
);
insert into test1 values (1,'abc');
insert into test1 values (1,'abc');
select * from test1;
select count(*) from test1;
select count(1) from test1;
select count(ALL 1) from test1;
select count(DISTINCT 1) from test1;
질문하는 사람에 따라 일부 사람들은 실행 select count(1) from random_table;
이 select count(*) from random_table
. 다른 사람들은 그들이 똑같다고 주장합니다.
이 링크 는 2 개의 속도 차이가 FULL TABLE SCAN 대 FAST FULL SCAN 때문이라고 주장합니다.
'developer tip' 카테고리의 다른 글
.htaccess에 주석 추가 (0) | 2020.09.16 |
---|---|
std :: map 삽입 또는 std :: map 찾기? (0) | 2020.09.16 |
WebSocket에서 서버 재부팅시 클라이언트 재 연결 (0) | 2020.09.15 |
Vim에서 주석의 글꼴 색상 변경 (0) | 2020.09.15 |
JavaScript 객체의 src 및 id를 사용하여 JQuery로 새 img 태그를 만드는 방법은 무엇입니까? (0) | 2020.09.15 |