답변:
다음 중 하나를 사용하는 것이 좋습니다.
-- Method 1.
SELECT 1
FROM table_name
WHERE unique_key = value;
-- Method 2.
SELECT COUNT(1)
FROM table_name
WHERE unique_key = value;
첫 번째 대안은 결과 또는 하나의 결과를 제공하지 않아야하며, 두 번째 개수는 0 또는 1이어야합니다.
사용중인 문서는 몇 살입니까? 좋은 조언을 읽었지만 최근 RDBMS의 대부분의 쿼리 최적화 프로그램은 SELECT COUNT(*)
어쨌든 최적화 하므로 이론과 오래된 데이터베이스에는 차이가 있지만 실제로는 차이를 느끼지 않아야합니다.
Count 함수를 전혀 사용하지 않는 것이 좋습니다.
IF [NOT] EXISTS ( SELECT 1 FROM MyTable WHERE ... )
<do smth>
예를 들어 데이터베이스에 사용자를 삽입하기 전에 사용자가 있는지 확인하려는 경우 쿼리는 다음과 같습니다.
IF NOT EXISTS ( SELECT 1 FROM Users WHERE FirstName = 'John' AND LastName = 'Smith' )
BEGIN
INSERT INTO Users (FirstName, LastName) VALUES ('John', 'Smith')
END
당신이 사용할 수있는:
SELECT 1 FROM MyTable WHERE <MyCondition>
조건과 일치하는 레코드가 없으면 결과 레코드 세트가 비어 있습니다.
다른 답변은 꽤 좋지만 불필요한 행을 확인하지 못하도록 추가 LIMIT 1
(또는 이에 상응하는 )를 사용하는 것이 좋습니다.
SELECT COUNT(1) FROM MyTable WHERE ...
모든 레코드를 통해 반복됩니다. 이것이 레코드 존재에 사용하기 어려운 이유입니다.
나는 사용할 것이다
SELECT TOP 1 * FROM MyTable WHERE ...
1 개의 레코드를 찾은 후 루프가 종료됩니다.
SELECT TOP 1
실제로 하나를 발견 한 후 종료됩니다 아니면 모든 TOP 어느 하나라고 할 수 찾기 위해 계속합니까?
IF EXISTS (SELECT TOP 1 1 FROM ... WHERE ..)
당신이 사용할 수있는:
SELECT COUNT(1) FROM MyTable WHERE ...
또는
WHERE [NOT] EXISTS
( SELECT 1 FROM MyTable WHERE ... )
이보다 더 효율적입니다 SELECT *
모든 필드가 아닌 각 행에 대해 단순히 값 1을 선택하기 때문에 입니다.
COUNT (*)와 COUNT (열 이름) 사이에는 미묘한 차이가 있습니다.
COUNT(*)
null을 포함하여 모든 행을 계산합니다.COUNT(column name)
Null이 아닌 열 이름 만 계산합니다.count(1)
와 count(*)
는 가장 뇌사 DBMS 다를 수 있습니다.
count(*)
하고 count(1)
. 그것이 다른 DBMS 의 경우이든 상관 없습니다.
당신이 사용할 수있는:
SELECT 1 FROM MyTable WHERE... LIMIT 1
select 1
불필요한 필드 확인을 방지하는 데 사용 합니다.
사용 LIMIT 1
불필요한 행의 검사를 방지 할 수 있습니다.